使用ssh-agent

Written by: algebnaly

Date: 2024-11-27T15:00:11.000Z

为什么需要ssh-agent

使用ssh远程连接服务器时, 需要反复输入密码, 但是使用密码远程登录服务器不太安全也非常麻烦。

更安全的方式是使用密钥, 如果使用不带密码保护的密钥, 直接使用密钥连接, 不需要输入密码, 即安全又快捷。

但是密钥有可能会泄漏, 所以最好还是用密码保护密钥, 这时又需要每次登录时输入密码, 十分麻烦。这个时候可以使用ssh-agent来避免反复输入密码。

如何启用ssh-agent

使用如下命令可以启动ssh-agent

ssh-agent -a $XDG_RUNTIME_DIR/ssh-agent.socket

我们还需要设置环境变量SSH_AUTH_SOCK, 如下

export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket

最后, 在~/.ssh/config配置文件中, 对需要使用ssh-agent的服务器配置添加 AddKeysToAgent yes, 例如

Host server
	Hostname server.com
	IdentityFile ~/.ssh/id_dev_ed25519
    AddKeysToAgent yes

可以通过systemd user service来实现开启启动ssh-agent, 如下

systemctl --user enable ssh-agent.service

然后, 在shell的配置文件中添加环境变量SSH_AUTH_SOCK, 这样每次启动shell时, SSH_AUTH_SOCK就会被设置为正确的值。 例如我用fish, 于是我会在~/.config/fish/config.fish中添加

set -gx SSH_AUTH_SOCK $XDG_RUNTIME_DIR/ssh-agent.socket

这样, 只在第一次远程服务器时需要输入密钥的密码, 后续的连接ssh-agent会自动帮我们解锁密钥。