OpenSSH ProxyJump可实现通过跳板机免密访问内网目标服务器,需确保客户端与跳板机OpenSSH≥7.3版本,配置~/.ssh/config声明代理关系,并部署两级密钥认证。

如果您需要通过一台中间服务器(跳板机)安全访问内网中的目标服务器,则可以利用OpenSSH的ProxyJump功能实现免密、高效的远程穿透。以下是配置SSH跳板机的具体步骤:
一、确认OpenSSH版本并启用ProxyJump支持
ProxyJump功能自OpenSSH 7.3版本起原生支持,需确保本地客户端及跳板机均运行7.3或更高版本。若版本过低,该功能不可用,将导致连接失败。
1、在本地终端执行 ssh -V 查看OpenSSH客户端版本。
2、若输出中显示版本号低于7.3,则需升级OpenSSH客户端:Ubuntu/Debian系统执行 sudo apt update && sudo apt install openssh-client;CentOS/RHEL系统执行 sudo yum update openssh-clients 或 sudo dnf upgrade openssh-clients。
3、验证跳板机SSH服务端版本:通过直接登录跳板机后运行 sshd -V(部分版本需加 2>&1 | head -1)。
二、配置~/.ssh/config文件启用ProxyJump
通过编辑本地用户的SSH配置文件,可声明跳板机与目标主机之间的代理关系,使一次ssh命令自动完成两级连接,无需手动登录中转机。
1、使用文本编辑器打开配置文件:nano ~/.ssh/config(若文件不存在则新建)。
2、添加如下结构化配置块(替换host1为跳板机别名,host2为目标主机别名,user1与user2为对应用户名,jump-server-ip与target-ip为实际IP):
Host host1\n HostName jump-server-ip\n User user1\n IdentityFile ~/.ssh/id_rsa_jump\n\nHost host2\n HostName target-ip\n User user2\n IdentityFile ~/.ssh/id_rsa_target\n ProxyJump host1
3、保存文件并退出编辑器,执行 chmod 600 ~/.ssh/config 设置正确权限。
三、使用密钥认证确保跳板链路免密通行
ProxyJump依赖逐级SSH连接,因此跳板机必须能无密码登录目标机,且本地机必须能无密码登录跳板机。密钥对需分别部署到位。
1、生成本地到跳板机的密钥对(如尚不存在):ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_jump -C "local-to-jump"。
2、将公钥复制至跳板机:ssh-copy-id -i ~/.ssh/id_rsa_jump.pub user1@jump-server-ip。
3、在跳板机上生成跳板机到目标机的密钥对:ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_target -C "jump-to-target"。
4、将跳板机上的公钥复制至目标机:ssh-copy-id -i ~/.ssh/id_rsa_target.pub user2@target-ip(需先从本地登录跳板机执行此命令)。
四、通过ProxyJump直接连接目标主机
配置生效后,本地终端执行单条SSH命令即可穿透跳板机直达目标主机,所有认证与路由由OpenSSH自动处理,不暴露中间凭证。
1、在本地终端输入:ssh host2。
2、若配置无误且密钥可用,终端将直接进入目标主机的shell界面,连接过程不提示输入任何密码。
3、验证当前所在主机:执行 hostname,输出应为目标主机的主机名而非跳板机名称。
五、替代方案:使用ProxyCommand配合nc实现兼容性连接
当客户端OpenSSH版本低于7.3,或需临时绕过ProxyJump时,可通过ProxyCommand指令调用netcat(nc)建立TCP隧道,模拟相同跳转逻辑。
1、确认跳板机已安装nc命令:登录跳板机后执行 nc -h,若报错则安装——Ubuntu/Debian执行 sudo apt install netcat,CentOS/RHEL执行 sudo yum install nc。
2、修改~/.ssh/config中目标主机段落,替换ProxyJump行为:
Host host2\n HostName target-ip\n User user2\n IdentityFile ~/.ssh/id_rsa_target\n ProxyCommand ssh -W %h:%p host1
3、保存配置后,仍使用 ssh host2 连接,OpenSSH将自动调用ssh -W通过host1转发连接请求。










