ssh-agent
约 937 字大约 3 分钟
2025-01-14
介绍
ssh 推荐的登录方式是使用私钥登录。但是如果生成私钥的时候,设置了口令/密码(passphrase),每次登录时需要输入口令也很麻烦。可以通过 ssh-agent 来管理私钥,把私钥加载进内存,之后便不用再输入密码。
当我们的主机有多个密钥对(例如:root用户生成了一对公钥私钥对,mt用户生成了另外一对公钥私钥对),我们连接到其他不同的多台主机时,可能用的认证用户不一样,这时候需要我们手动指定使用哪个密钥,一旦机器过多输入会非常繁琐,ssh-agent能帮我们管理这些密钥对。当我们给私钥加了密码,而我们的认证方式又选择了密钥认证,ssh-agent可以帮助我们免去输入密码的繁琐操作。
ssh-agent 使用
- 启动
ssh-agent
通过 ssh-agent bash 或者 eval ssh-agent (这里是shell 的命令替换符)来启动。
- 添加私钥到
ssh-agent
通过 ssh-add Identity_Linux 为 ssh-agent 添加私钥。这里的 Identity_Linux 是我的私钥文件。
- 查看
ssh-agent中的私钥
添加之后,可通过 ssh-add -l 来查看已经添加的私钥。
- 测试
在没有将私钥添加到ssh-agent之前,我们也可以通过如下命令来登录远程主机:
$ ssh root@192.168.1.1但如果私钥不是放在 ssh 客户端缺省读取的位置或者不是默认的名字,就需要使用 -i 选项显示的指定私钥文件。
$ ssh -i Identity_Linux root@192.168.1.1还有就是如果私钥设置了密码,就需要输入私钥的密码。
在给代理添加私钥时,需要输入一次私钥的口令。之后不再指定私钥也不需口令即可登录了。
$ ssh root@192.168.1.1ssh-agent 原理
用户使用 ssh-agent 来管理私钥之后。ssh-agent 会启动一个进程在内存里保存这些私钥。之后每次登录时,ssh 客户端都会跟 ssh-agent 请求是否有目标主机的私钥,如果有 ssh 客户端便能直接登录目标主机。
ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。
如果是为了永久记住对应的私钥是哪个,我们不能依赖 ssh-agent 服务。
注意 如果私钥设置了密码,应该保存好私钥的密码。
自动启动 SSH 代理
可以考虑自动启动 ssh-agent 服务,并自动添加私钥。
你可以通过修改 .bashrc 或 .zshrc 文件(取决于你使用的 Shell),使 SSH 代理在每次打开终端时自动启动。
示例(.bashrc 或 .zshrc):
# 启动 SSH 代理
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
fi提示 注意就是让 SSH 代理自动启动,这里是每次打开终端时都会启动。也可以写成一个脚本文件,配置脚本文件在启动时自动执行,反正只要能执行 SSH 代理启动命令并添加私钥即可,方法挺多。
注意 前面所有的命令均在Windows PowerShell中执行的。
