SSH使用ProxyCommand通过代理服务器远程连接其他服务器
ProxyCommand ssh linuxOpenSSH的客户端有一个 ProxyCommand 的选项,用于 SSH 客户端与服务器之间的隧道通信(tunneling)。所谓的隧道技术,也称代理技术,是网络通信技术的一个普遍概念,就是把一条信道建立于另外一条信道之上。
SSH 会话基于一个 TCP 连接,如果我们把连接的两个端口各自的出口(也即入口)进行截获,就可以用其它的信道来传输。而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接。
ProxyCommand 指定一个命令(称为 Proxy),SSH 客户端将通过标准输入输出和这个命令启动后的进程进行正常的 SSH 通信,而 Proxy 连接着 SSH 服务器(一般是一个 Server Proxy,再由该 Server Proxy 连接服务器)。
环境说明
远程服务器的IP地址为 0.0.0.1,代号为X;
另一个远程服务器的IP为 0.0.0.2,代号为Y;
目前本机的IP地址为 0.0.0.3,代号为A,本地可以利用SSH客户端通过密钥或密码连接X和Y;
这里全部使用密钥的方式进行访问,本机 A 与 Y 之间无法进行访问。
本地的
~/.ssh/config
的配置文件信息如下,通过X连接到Y;
Host X
HostName 0.0.0.1
User root
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_1
Host Y
HostName 0.0.0.2
User root
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_2
Host test
HostName 0.0.0.2
User root
Port 22
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh X -W %h:%p
测试本机通过 X 连接到 Y 服务器
ssh test
附注:
-W host:port
Requests that standard input and output on the client be forwarded to host on port over the secure channel. Implies -N, -T, ExitOnForwardFailure and
ClearAllForwardings, though these can be overridden in the configuration file or using -o command line options.
-W:该参数在OpenSSH 5.4及之后的版本才支持,参考官方的Release信息;
在使用-W之前,通常都是使用nc选项,nc允许你转发TCP/UDP数据包到指定(备用)位置并且基本上与ssh -W相同;
参考: openssh