使用ssh proxyjump可实现本地直连内网服务器,需满足客户端与服务端ssh版本≥7.3、密钥登录配置完备且权限为600,并通过~/.ssh/config或命令行参数一键跳转,验证时应无交互直达目标并支持认证代理透传。

你需要从本地终端直接登录一台无法被公网直连的内网服务器,中间必须经过一台已开放外网的跳板机中转,且不希望手动先登跳板、再从跳板登目标——这要求整条链路自动加密、认证透传、命令直达。
确认基础环境是否就绪
ProxyJump 功能不是“装了就能用”,它依赖三个硬性前提同时满足:本地 SSH 客户端版本 ≥ 7.3;跳板机上的 sshd 服务版本 ≥ 7.3;所有节点(本地、跳板、目标)均已配置密钥登录且私钥权限为 【600】。
执行 ssh -V 查看本地版本;登录跳板机运行 sshd -V 2>&1 | head -1 验证服务端版本;检查 ~/.ssh/id_*.pub 是否已写入跳板机对应用户的 authorized_keys,以及跳板机上的私钥是否已写入目标机对应用户的 authorized_keys。
跳板机 /etc/ssh/sshd_config 中必须包含这两行且未被注释:AllowTcpForwarding yes 和 AllowAgentForwarding yes。改完记得 sudo systemctl restart sshd。
用 ~/.ssh/config 实现一键直达
这是最稳定、可复用性最强的方式,配置后 ssh target、scp file target:/tmp/、VS Code Remote-SSH 全部自动走跳转链路。
第一步:用 nano 或 vim 打开配置文件:nano ~/.ssh/config
第二步:按实际信息填入以下结构(注意:每个 Host 块顶格写,字段用空格缩进,禁用 Tab 键):
Host jump
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/id_ed25519_jump
Host target
HostName 192.168.5.20
User appuser
IdentityFile ~/.ssh/id_ed25519_target
ProxyJump jump
第三步:保存退出后立即执行 chmod 600 ~/.ssh/config —— 【权限不是建议,是强制要求;否则 SSH 直接忽略该文件】
命令行临时跳转(无需改配置)
适合调试链路、CI/CD 脚本或临时访问,所有参数一次性声明,不污染本地配置。
方法一(单跳):ssh -o ProxyJump=admin@203.0.113.10 appuser@192.168.5.20
方法二(双跳):ssh -o ProxyJump=admin@203.0.113.10 -o ProxyJump=ops@10.1.1.20 appuser@172.16.5.100
方法三(指定私钥+端口):ssh -o ProxyJump="admin@203.0.113.10:2222" -i ~/.ssh/id_rsa_target -p 22 appuser@192.168.5.20
注意:ProxyJump 值中不能加引号包裹整个字符串,但若用户名含 @ 符号(如 user@domain),则必须用引号包裹该段,例如 'user@domain@203.0.113.10'。
验证跳转是否真正生效
能登录不等于链路可用。关键验证点是:认证能力是否抵达最终目标,而非卡在跳板机上做二次认证。
执行 ssh target,应无任何中间交互,直接进入目标机 shell;
登录后立刻运行 ssh-add -l,若输出本地加载的私钥指纹,说明 agent 成功透传(需跳板机 sshd_config 启用 ForwardAgent yes 且本地已运行 eval $(ssh-agent));
若失败,先在跳板机上运行 echo $SSH_AUTH_SOCK —— 若无输出,说明 agent 未启动或未转发;此时需在本地执行 ssh-add ~/.ssh/id_* 加载密钥,并确保 ~/.ssh/config 中对应 Host 块含 ForwardAgent yes。











