必须用proxyjump实现多级跳板,因其原生支持链式加密、全程审计可控且兼容scp/sftp;需确保本地及每台跳板机openssh≥7.3、逐层密钥就位、网络连通、配置文件权限600且proxyjump值为前一跳host别名。

配置 SSH 多跳连接,核心是用 ProxyJump 实现链式加密转发,而非手动嵌套登录;私钥始终留在本地,跳板机不接触密钥文件,所有认证由本地 ssh-agent 统一管理——这才是安全、可审计、可复用的正确方式。
确保版本与基础环境就绪
OpenSSH 7.3+ 是硬性前提,本地客户端和每一台跳板机(包括中间层)的服务端都必须满足:
- 本地运行
ssh -V,确认输出为OpenSSH_7.3p1或更高 - 每台跳板机执行
sshd -V 2>&1 | head -1,验证服务端版本 ≥ 7.3 - 若版本过低:Ubuntu/Debian 运行
sudo apt update && sudo apt install openssh-client openssh-server;CentOS/RHEL 使用sudo yum update openssh* - 所有节点提前完成密钥登录配置,确保
ssh user@host不需输密码(可用ssh-copy-id批量部署公钥)
用 ~/.ssh/config 定义多跳链路
这是最稳定、兼容 scp/sftp、便于团队共享的配置方式。以“本地 → jump1 → jump2 → target”为例:
- 每个
Host块必须有唯一别名(如jump1),不能用通配符Host *覆盖关键设置 -
ProxyJump的值只能是前一跳的 Host 别名,不能写 IP 或混用用户名 - 每跳使用独立私钥文件(如
~/.ssh/id_ed25519_jump1和~/.ssh/id_ed25519_target) - 保存后立即执行
chmod 600 ~/.ssh/config,否则 OpenSSH 会忽略该文件
示例配置:
Host jump1
HostName 203.0.113.10
User ops
IdentityFile ~/.ssh/id_ed25519_jump1
Host jump2
HostName 10.1.1.20
User admin
IdentityFile ~/.ssh/id_ed25519_jump2
ProxyJump jump1
Host target
HostName 172.16.5.100
User dev
IdentityFile ~/.ssh/id_ed25519_target
ProxyJump jump2
启用并验证 Agent 转发
代理转发不是传输私钥,而是把本地 ssh-agent 的签名能力逐跳透传。要让它真正生效,必须同时满足三处设置:
- 本地
~/.ssh/config中,第一跳(如jump1)必须显式声明ForwardAgent yes - 跳板机的
/etc/ssh/sshd_config必须含AllowAgentForwarding yes(默认开启,但加固模板常禁用) - 目标服务器登录后,运行
ssh-add -l,输出应与本地一致;若为空,说明转发在某一层中断
验证技巧:从 jump1 登录 target 时加 -o LogLevel=DEBUG2,日志中出现 key: /home/user/.ssh/id_rsa (0x) 才算成功透传。
安全边界与运维要点
跳板机不是通道,而是可控入口。必须配合服务端策略才能守住边界:
- 跳板机禁用密码登录:
PasswordAuthentication no,强制密钥认证 -
~/.ssh/authorized_keys权限设为600,用户目录权限为700,否则 SSH 拒绝加载公钥 - 每台跳板机启用审计日志:
ForceCommand /usr/bin/script -qf -e -c "/bin/bash" /var/log/ssh/session-$(date +\%Y\%m\%d)-$USER-$$ - 限制跳板机入向访问:防火墙只开放 22 端口,且仅允许可信 IP 段连接











