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.1
ssh-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
中执行的。