Linux多跳免密登录本质是通过ed25519密钥对+ProxyJump+AgentForwarding实现链式认证:本地生成密钥并部署至跳板机和目标服务器,配置~/.ssh/config启用ProxyJump与ForwardAgent,确保私钥不落地、全程由本地私钥完成签名验证。

Linux 通过 SSH 实现无密码的安全跳转,本质是“多跳免密登录”,即从本地 → 跳板机(bastion)→ 目标服务器,全程不输密码,且每一步都符合最小权限与加密安全原则。关键不是跳过认证,而是用私钥链式认证 + 代理转发机制,避免私钥暴露在中间节点。
配置跳板机信任关系(本地到跳板机)
这是整个链条的第一环,必须先确保本地能免密登录跳板机。
- 在本地生成强密钥对(推荐 ed25519,更安全高效):
ssh-keygen -t ed25519 -C "me@local" - 用
ssh-copy-id把公钥部署到跳板机(如jump@192.168.10.5):ssh-copy-id -i ~/.ssh/id_ed25519.pub jump@192.168.10.5 - 验证免密登录是否生效:
ssh jump@192.168.10.5—— 应直接进入,无密码提示 - 检查跳板机上
~/.ssh/authorized_keys权限为600,~/.ssh目录为700
启用 AgentForwarding 并配置跳板机 SSH 服务
让跳板机能“代为出示”你的本地私钥(不落地、不存储),从而访问后端服务器。这是安全跳转的核心机制。
- 在本地
~/.ssh/config中添加跳板机配置:Host jump<br> HostName 192.168.10.5<br> User jump<br> IdentityFile ~/.ssh/id_ed25519<br> ForwardAgent yes
- 确保跳板机的
/etc/ssh/sshd_config允许代理转发:AllowAgentForwarding yes(默认通常开启,确认未被注释或设为 no) - 重启跳板机 SSH 服务:
sudo systemctl restart sshd - ⚠️ 注意:跳板机上不能启用
PermitRootLogin yes或开放不必要的用户 shell;建议仅允许特定用户(如jump)且禁用密码登录(PasswordAuthentication no)
配置目标服务器信任(跳板机 → 目标)
目标服务器只需信任你的本地公钥——不是跳板机的公钥,而是你本地生成的那个。因为 AgentForwarding 会让认证请求“透传”过去。
- 在本地终端启动 ssh-agent 并加载私钥:
eval "$(ssh-agent -s)"<br>ssh-add ~/.ssh/id_ed25519
- 将本地公钥内容(
cat ~/.ssh/id_ed25519.pub)复制到目标服务器(如app@10.0.2.100)的~/.ssh/authorized_keys中,权限同前(600 / 700) - 在本地
~/.ssh/config添加目标主机别名:Host app<br> HostName 10.0.2.100<br> User app<br> ProxyJump jump
执行跳转并验证安全性
完成配置后,一条命令即可直达目标,且所有认证均由本地私钥完成,跳板机全程不接触私钥明文。
- 测试跳转:
ssh app—— 自动经 jump 登录 app,无任何密码输入 - 验证是否走代理:
登录成功后,在 app 上执行echo $SSH_CONNECTION,应显示跳板机 IP 而非本地 IP;再执行ssh-add -l,若能看到本地密钥指纹,说明 agent forwarding 生效 - 安全加固建议:
• 跳板机关闭密码登录、禁用 root 远程登录
• 本地私钥设 passphrase(用ssh-add缓存后仍需首次解锁)
• 定期轮换密钥,移除不再使用的公钥条目


















