Skip to content

Latest commit

 

History

History
66 lines (39 loc) · 2.76 KB

ssh_proxycommand.rst

File metadata and controls

66 lines (39 loc) · 2.76 KB

SSH ProxyCommand实现穿透主机访问后端服务器

我在构建 priv_cloud_infra 时,尝试在物理主机 zcloud 上构建 squid_ssh_proxy 访问虚拟化内部局域网的VM。不过,实践发现,传统的 nc 构建将SSH访问转发给 squid 方法比较陈旧,实际上我并没有最终解决这个代理方式访问SSH。不过, openssh 最新版本已经内置了代理转发功能,已经不再需要 nc 来完成流量转发,而可以直接访问中间代理 SSH 服务器,从而实现穿透主机访问后端服务器。

SSH代理命令依然是 ProxyCommand ,使用方法有所不同:

ssh <target_server> -o "ProxyCommand ssh -W %h:%p <jump_server>"

举例:

ssh 192.168.6.253 -o "ProxyCommand ssh -W %h:%p 10.10.1.200"

就可以实现通过跳板服务器 10.10.1.200 直接SSH登陆 192.168.6.253

上述命令参数也可以配置在 ~/.ssh/config 中:

ssh_proxycommand/ssh_config

则直接:

ssh z-dev

就可以登陆到后端服务器:

  • 注意: 需要输入2次服务器登陆密码或者2次 ssh_key ,分别是中间转跳服务器认证和目标服务器认证
  • scp 命令也可以使用上述配置的 ProxyCommand ,所以向 z-devscp 复制文件也非常方便:

    scp file z-dev:/home/huatai/

结合 ssh-agent

为了方便实现穿透访问后端SSH服务器,结合 ssh_keyssh-agent 可以不需要重复输入密码或者密钥密码

ssh_proxycommand/zssh.sh

使用 ssh-agent 缓存了密钥密码之后,只需要执行上述脚本命令(从配置文件中读取出ip和主机名,提取IP,跳板SSH服务器IP从 /etc/hosts 中获取):

zssh.sh z-dev

ProxyJump

ProxyCommand 类似的还有一个SSH指令是 ProxyJump (OpenSSH 7.3引入)使用方法类似:

scp -o "ProxyJump <User>@<Proxy-Server>" <File-Name> <User>@<Destination-Server>:<Destination-Path>

ProxyJump 指令还支持多跳(神奇):

ssh -J jumpuser1@jumphost1,jumpuser2@jumphost2,...,jumpuserN@jumphostN user@host

参考