ssh proxyjump 实现跳板机登录需满足:openssh≥7.3、密钥登录且权限600、跳板机启用allowtcpforwarding/agentforwarding;配置中各host独立指定identityfile,用proxyjump声明跳转链,支持多层嵌套及ssh-agent密钥透传。

在 SSH 客户端配置文件(~/.ssh/config)中管理跳板机登录,核心是用 ProxyJump 声明跳转关系,让本地终端一条命令直达内网目标,中间不存密钥、不参与认证,全程加密且可复用。
确保基础条件满足
配置前必须确认以下几点都已落实,否则 ProxyJump 会静默失效或报错:
- 本地执行
ssh -V,OpenSSH 版本 ≥ 7.3; - 每台跳板机执行
sshd -V 2>&1 | head -1,服务端版本同样 ≥ 7.3; - 所有节点(本地、跳板机、目标机)均已配置密钥登录,私钥权限为
600(chmod 600 ~/.ssh/id_*); - 跳板机的
/etc/ssh/sshd_config中启用:AllowTcpForwarding yesAllowAgentForwarding yes
并建议关闭密码登录:PasswordAuthentication no。
编写 ~/.ssh/config 实现跳转
这是最稳定、最通用的方式,支持 ssh、scp、sftp 和 VS Code Remote-SSH:
- 每个
Host块顶格写,字段用空格缩进(禁用 Tab); - 跳板机和目标机分别定义,用
ProxyJump显式声明依赖关系; - 每个
Host必须指定IdentityFile,不同节点不共用私钥文件; - 配置完立即执行
chmod 600 ~/.ssh/config,否则 SSH 直接忽略该文件。
示例(本地 → 跳板机 jump1 → 内网服务器 target):
Host jump1
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/id_ed25519_jump1
Host target
HostName 192.168.5.20
User appuser
IdentityFile ~/.ssh/id_ed25519_target
ProxyJump jump1
之后只需运行 ssh target,即可自动经由 jump1 登录目标机。
支持多层跳转链
当穿透路径更长(例如公网跳板 → 内网跳板 → 最终目标),ProxyJump 支持嵌套定义:
- 逐级定义每台中间节点,上一级通过
ProxyJump指向下一级; - 确保网络连通性:
jump1能直连jump2,jump2能直连final; - 所有主机块仍需各自指定
IdentityFile和用户。
三层配置示例:
Host jump1
HostName 203.0.113.10
User juser1
IdentityFile ~/.ssh/id_rsa_jump1
Host jump2
HostName 10.1.1.20
User juser2
IdentityFile ~/.ssh/id_rsa_jump2
ProxyJump jump1
Host final
HostName 172.16.5.100
User appadmin
IdentityFile ~/.ssh/id_rsa_final
ProxyJump jump2
配合 ssh-agent 实现密钥透传
若希望在目标机上也能使用本地加载的密钥(比如继续 git clone 或跳转到其他机器),需开启 agent 转发:
- 在对应
Host块中添加ForwardAgent yes; - 确保本地已启动
ssh-agent并加载了密钥(eval $(ssh-agent)+ssh-add ~/.ssh/id_*); - 登录后在目标机执行
ssh-add -l,能列出密钥即表示透传成功。











