ssh客户端通过proxycommand经跳板机连目标服务器,需全程免密、配置~/.ssh/config并设proxycommand ssh -w %h:%p jump,支持ssh/scp/rsync自动复用。

Linux 系统中配置 SSH 客户端使用 ProxyCommand,核心是让本地 SSH 不直连目标机,而是通过跳板机建立一条透明隧道。它兼容旧版 OpenSSH(≥5.4),无需跳板机启用 Agent 转发,也无需修改服务端配置,特别适合自动化部署和脚本集成。
确认基础连通性与密钥准备
整条链路必须全程免密:本地 → 跳板机 → 目标服务器。
- 本地已生成并加载跳板机登录私钥(如
~/.ssh/id_rsa_jump),对应公钥已写入跳板机的~/.ssh/authorized_keys - 跳板机上已生成另一对密钥(如
~/.ssh/id_rsa_target),其公钥已写入目标服务器对应用户的~/.ssh/authorized_keys - 从跳板机能直接 ssh 连通目标服务器(例如:
ssh -o ConnectTimeout=5 appuser@192.168.5.20) - 跳板机需支持
ssh -W(OpenSSH 默认开启;若不支持,可用nc替代)
编辑 ~/.ssh/config 固化跳转逻辑
这是最常用、最稳定的方式,配置后 ssh、scp、rsync 全部自动复用,无需改脚本。
在 ~/.ssh/config 中添加类似以下内容(替换为实际值):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
Host jump
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/id_rsa_jump
Host target
HostName 192.168.5.20
User appuser
IdentityFile ~/.ssh/id_rsa_target
ProxyCommand ssh -W %h:%p jump
说明:
-
-W %h:%p表示在跳板机上打开一个 TCP 隧道,把目标主机地址和端口透传过去 -
%h和%p是自动替换占位符,分别对应target的HostName和端口(默认 22) - 保存后执行
chmod 600 ~/.ssh/config,否则 SSH 会忽略该文件
命令行临时使用 ProxyCommand(调试或 CI 场景)
不修改配置文件,适合一次性连接或容器内运行:
- 单跳:
ssh -o "ProxyCommand=ssh -W %h:%p admin@203.0.113.10" appuser@192.168.5.20 - 若跳板机不支持
-W,改用 netcat:ssh -o "ProxyCommand=ssh admin@203.0.113.10 nc %h %p" appuser@192.168.5.20 - 可叠加其他选项,如指定私钥:
-i ~/.ssh/id_rsa_target,或端口:-p 2222
验证是否生效
配置完成后,只需运行 ssh target,应直接进入目标服务器,无中间交互。
- 若报错
Connection refused或超时,请检查跳板机能否telnet 192.168.5.20 22 - 若提示权限拒绝,请确认
IdentityFile路径正确,且私钥权限为600 - 若想在登录后自动执行命令(如切换目录、加载环境),可在
target块中加:RemoteCommand cd /app && bash --login和RequestTTY yes










