已配置密钥认证,如何实现服务器间SSH免密钥短语登录?
服务器间SSH免密钥短语登录解决方案
问题原因
本地机器通过ssh-agent缓存了解锁后的密钥,因此能免短语连接各服务器;但登录到server1后,server1既未关联本地的ssh-agent,也未自行启动并加载密钥,所以ssh到server2时需要重新输入密钥短语。
方案1:SSH Agent转发(推荐,更安全)
这种方式无需在服务器上存储密钥,而是将本地的ssh-agent连接转发到server1,让server1借助本地agent完成密钥解锁:
- 本地配置永久转发:编辑本地
/root/.ssh/config文件,添加以下内容:
保存后,后续执行Host server1 server2 server3 ForwardAgent yesssh root@server1连接时会自动开启agent转发。 - 临时转发(单次生效):若不想修改配置,每次连接server1时添加
-A参数:
登录server1后,再执行ssh -A root@server1ssh root@server2就无需输入密钥短语了。
方案2:服务器本地启动ssh-agent
如果无法使用agent转发,可在server1上启动ssh-agent并加载密钥:
- 登录server1后,启动ssh-agent:
eval $(ssh-agent) - 加载本地密钥(假设密钥文件为
/root/.ssh/id_rsa):
输入一次密钥短语后,后续在server1上ssh到其他服务器就无需重复输入。ssh-add /root/.ssh/id_rsa - 自动启动配置:若想每次登录server1都自动完成上述操作,可将命令添加到
~/.bashrc或~/.profile文件末尾:
注意:此方式会在服务器上存储密钥文件,安全性低于agent转发,需确保服务器环境安全。if [ -z "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent) ssh-add /root/.ssh/id_rsa fi
关键权限检查
确保服务器上的SSH相关文件权限正确,否则会导致密钥无法正常使用:
chmod 700 /root/.ssh chmod 600 /root/.ssh/id_rsa chmod 600 /root/.ssh/authorized_keys
内容的提问来源于stack exchange,提问作者Marcel Kraan
相关产品推荐
相关产品推荐

