Written by: algebnaly
Date: 2024-11-27T15:00:11.000Z
使用ssh远程连接服务器时, 需要反复输入密码, 但是使用密码远程登录服务器不太安全也非常麻烦。
更安全的方式是使用密钥, 如果使用不带密码保护的密钥, 直接使用密钥连接, 不需要输入密码, 即安全又快捷。
但是密钥有可能会泄漏, 所以最好还是用密码保护密钥, 这时又需要每次登录时输入密码, 十分麻烦。这个时候可以使用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会自动帮我们解锁密钥。