如何避免每次都输入 ssh-add

ssg*_*gao 11 ssh password ssh-agent

我阅读并遵循了一些关于如何设置ssh-agent 的在线文档,这样我就不需要每次 ssh 到远程机器时都输入密码。

但是,在ssh-agent的帮助下,我ssh-add每次重新启动 shell 时仍然需要这样做。在ssh-add随后要求我输入密码解锁私钥。

Enter passphrase for key '/home/xx/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)

我没有输入远程机器的密码,而是要求我输入私钥的密码。这就像走出炼狱,然后发现自己陷入了地狱。看起来 id_rsa 只是在 session 中临时添加到 ssh-agent 中,因为每次我登录并键入ssh-add -l. 我得到:

The agent has no identities.
Run Code Online (Sandbox Code Playgroud)

请问如何将密钥(id_rsa)永久存储在ssh-agent中?谢谢

编辑:这就是我对ssh-agent. 我将以下块附加到~/.bash_profile

SSHAGENT=/usr/bin/ssh-agent                                                                                        
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "SSHAGENT" ]; then
  eval `$SSHAGENT $SSHAGENTARGS`
  trap "kill $SSH_AGENT_PID" 0
fi
Run Code Online (Sandbox Code Playgroud)

小智 7

我已经安装了钥匙串。

sudo apt-get 安装钥匙串

如果您正在运行 bash,您需要向您的 .bash_profile 添加一些命令 如果您没有 .bash_profile 在您的主文件夹中创建一个。添加这些行:

### START-Keychain ###
# Let  re-use ssh-agent and/or gpg-agent between logins
/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
### End-Keychain ###
Run Code Online (Sandbox Code Playgroud)

在工作日开始时,我将登录。当我打开终端时,系统会提示我输入密码。对于所有其他新终端和连接,我将不会再次被要求输入密码。

  • 这与在终端中输入 `ssh-add` 有何不同? (4认同)

小智 1

您正在寻找的安全性较低,但可以使用公钥身份验证来完成,而不需要 ssh-agent。更安全的选择是使用带有密码的公钥身份验证,同时关闭 ssh 服务器上的密码身份验证,但这不是您所要求的。如果您决定这样做,请参阅此答案底部的链接以获取说明。

要在不要求输入任何密码的情况下使用 ssh,您需要生成密钥对,同时将密码字段留空。

要检查您是否已生成密钥对,请检查 ~/.ssh 目录中的文件 id_rsa 和 id_rsa.pub。如果它们已经存在,您可以删除它们或移动它们以创建新的密钥对。

请注意,如果删除它们,您将无法访问您正在使用的任何 ssh 服务器,然后在服务器上关闭密码身份验证的情况下使用旧密钥进行身份验证。

要创建新的密钥对,请运行以下命令:

ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)

接受密钥的默认位置并将密码留空。

要将公钥提供给要连接的 ssh 服务器,请使用以下命令:

ssh-copy-id -i ~/.ssh/id_rsa.pub username@remotehost
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,您将能够从您正在使用的计算机登录到远程服务器,而无需密码。

参考:http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/