Mac下 ssh 登录 跳板机 中转 至服务器

来源:互联网 发布:国内搜索引擎排名算法 编辑:程序博客网 时间:2024/05/15 10:27

Mac下 ssh 登录 跳板机 中转 至服务器


Mac 环境下使用”公钥文件”,登录跳板机,再转到 服务器一般有2种形式:

  1. 使用第三方工具,如SecureCRT。
  2. 在Terminal中直接使用ssh命令。

Case 1: 使用SecureCRT登录时,在 [Options] -> [Global Options] -> [SSH2],选项中,勾选:使用Ssh-Agent进行转发,即可。

这里写图片描述

Case 2:使用ssh命令登录。使用ssh命令登录跳转机,需要借助ssh-agent来转发”公钥文件”,可以将ssh-agent理解为一个密钥管理器,运行ssh-agent之后,使用ssh-add将私钥交给ssh-agent保管,需要身份验证时,可以将申请交给ssh-agent来完成。

方法一:

➜  ~ eval `ssh-agent`Agent pid 4792➜  ~ ssh-addEnter passphrase for /Users/gy/.ssh/id_rsa: //输入生成密钥时的密码Identity added: /Users/gy/.ssh/id_rsa (/Users/gy/.ssh/id_rsa)

修改/etc/ssh/ssh_config文件,将ForwardAgent设置为Yes.

  • ForwardAgent yes

方法二:

➜  ~ ssh -A 用户名@跳转机IP // -A表示转发密钥,转发到跳板机➜  ~ ssh 用户名@目标机器IP

SSH的常用参数:

  • 1:强制使用ssh协议版本1
  • 2:强制使用ssh协议版本2
  • 4:强制使用IPv4地址
  • 6:强制使用IPv6地址
  • A:开启认证代理连接转发功能
  • a:关闭认证代理连接转发功能
  • C:请求压缩所有数据
  • F:指定ssh指令的配置文件
  • i:指定身份文件
  • l:指定连接远程服务器登录用户名
  • N:不执行远程指令
  • o:指定配置选项
  • q:静默模式
  • X:开启X11转发功能
  • y:开启信任X11转发功能
  • v : 查看ssh登录详情

方法三:通过ProxyCommand来实现
在用户根目录下的.ssh文件中创建config文件,在文件中增加跳板机和目标机器的配置信息:

type-1Host alias-name ## host alias name, such as hadoop0    HostName #真实服务器ip或主机名    User #真实服务器用户名    ProxyCommand    none    IdentityFile    path of your private ssh key file     PasswordAuthentication    no# type-2Host alias-name ## host alias name, such as hadoop0    user #真实服务器用户名    HostName #真实服务器ip或主机名    ProxyCommand ssh -A 跳板机用户名@跳板机ip地址 -W %h:%p # %h主机地址, %p主机端口 -W指定连接字符串形式

ProxyCommand 转自:ProxyCommand思想

OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling). 所谓的隧道技术, 也称代理技术, 是网络通信技术的一个普遍概念, 就是把一条信道建立于另外一条信道之上.

SSH 会话基于一个 TCP 连接. 如果我们把连接的两个端口各自的出口(也即入口)进行截获, 就可以用其它的信道来传输. 而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接.

ProxyCommand 指定一个命令(或程序, 称为 Proxy), SSH 客户端将通过标准输入输出和这个命令启动后的进程进行正常的 SSH 通信, 而 Proxy 连接着 SSH 服务器(一般是一个 Server Proxy, 再由该 Server Proxy 连接服务器). Proxy 和 Server Proxy 之间组成了一条隧道. 如果两者之间用 HTTP 协议进行通信, 则整个系统便称为”tunneling SSH over HTTP”, 当然也可以使用 UDP, TCP, IP 以及其它任意的可行的协议.

SSH ProxyCommand 相对于 SOCKS, HTTP 或者其它的 Proxy 技术, 更简单. 因为它工作在进程间的文件 IO 通信, 用任何支持 socket 的编程语言, 都能轻易地编写出一个可用的 Proxy. 复杂度只落在隧道本身. 想一想, 如果没有 ProxyCommand, 你需要改变或侵入操作系统的 TCP 子系统才能实现 SSH 隧道. ProxyCommand 提供了方便应用隧道的接口, 网络程序都应该提供这样的接口, 而不是完全依赖于 socket.

因为一个会话就会启动一个 ProxyCommand 进程, 所以, 只有在会话依赖于连接的协议上才能使用这种技术.

参考连接:
1. SSH通过跳板机连接服务器
2. 使用ssh-agent实现ssh完全免密码登陆
3. SSH ProxyCommand 实践
4. ProxyCommand
5. SSH ProxyCommand example: Going through one host to reach another server