我阅读并遵循了一些关于如何设置ssh 代理这样我就不需要在每次 ssh 到远程机器时输入密码。
然而,在ssh 代理ssh-add
,每次我重新启动 shell 时,我仍然需要这样做。ssh-add
然后要求我输入密码来解锁私钥。
Enter passphrase for key '/home/xx/.ssh/id_rsa':
我不需要输入远程机器的密码,而是需要输入私钥的密码。这就像刚走出炼狱,却发现自己身处地狱。看起来 id_rsa 只是在会话中临时添加到 ssh-agent 中,因为每次我登录并输入时ssh-add -l
,我都会得到:
The agent has no identities.
请问如何将密钥(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
答案1
我已经安装了钥匙串。
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 ###
在开始一天的工作时,我会登录。当我打开终端时,系统会提示我输入一次密码。对于所有其他新终端和连接,系统不会再次要求我输入密码。
答案2
您所寻找的是不太安全的,但可以使用公钥身份验证来实现,而无需 ssh-agent。更安全的选择是使用带有密码的公钥身份验证,同时关闭 ssh 服务器上的密码身份验证,但这不是您想要的。如果您决定这样做,请参阅此答案底部的链接以获取说明。
要使用 ssh 而不要求输入任何密码,您需要生成密钥对,同时将密码字段留空。
要检查您是否已生成密钥对,请检查 ~/.ssh 目录中的文件 id_rsa 和 id_rsa.pub。如果它们已经存在,您可以删除它们或移动它们以创建新的密钥对。
请注意,如果删除它们,您将无法访问您正在使用的任何 ssh 服务器,并且如果服务器上的密码验证已关闭,则使用旧密钥进行验证。
要创建新的密钥对,请运行以下命令:
ssh-keygen -t rsa
接受密钥的默认位置并将密码留空。
要将您的公钥提供给您想要连接的 ssh 服务器,请使用以下命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remotehost
完成这些步骤后,您将能够从您正在使用的计算机无需密码登录远程服务器。
参考:http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/