SSH ProxyJump多跳访问主机¶
使用 SSH ProxyCommand实现穿透主机访问后端服务器 可以很方便实现2跳SSH,不过,在实现3跳或者更多N跳SSH访问并不直观,使用配置也较为繁琐。SSH的 ProxyJump
指令在 ProxyCommand
指令之上构建一个自动在远程主机上执行ssh命令,跳到目标主机并且转发所有通过流量的解决方案。
命令行ProxyJump¶
使用 -J
参数可以穿透主机跳下一跳主机:
ssh -J host1 host2
而且可以添加用户名和端口:
ssh -J user1@host1:port1 user2@host2 -p port2
甚至可以多跳:
ssh -J user@host1:port1,user2@host2:port2 user3@host3
配置方式多跳ProxyJump¶
配置
~/.ssh/config
类似如下可以实现跳越:ssh => pixel => zcloud => z-dev
Host pixel
HostName 192.168.10.9
Port 8022
User u0_a299
LocalForward 8443 127.0.0.1:8443
Host zcloud
HostName 192.168.7.200
ProxyJump pixel
LocalForward 8443 192.168.6.25:8443
Host z-dev
HostName 192.168.6.253
ProxyJump zcloud
LocalForward 8443 127.0.0.1:443
则简单执行:
ssh z-dev
就可以连跳3次SSH访问到内部服务器
关闭 AllowTcpForwarding
¶
出于安全原因,需要关闭中间转跳服务器的ProxyJump功能,则在中间服务器的 /etc/sshd_config
中添加:
AllowTcpForwarding no
则上述ProxyJump就会被断开(中间SSH服务器拒绝发起到目标服务器的TCP连接,所以不能构建tunnel),使用 ssh -vvv
检查时客户端显示:
...
Stdio forwarding request failed: Session open refused by peer
kex_exchange_identification: Connection closed by remote host
但是,除非禁止用户shell访问,否则依然可能被forwarder绕过。