如何删除SSH密钥的密码而不必创build新密钥?

在我的笔记本电脑上创build一个新的SSH密钥时,我设置了密码。 但是,现在我意识到,当你试图在一个小时内通过SSH多次提交( Git和SVN )到远程位置时,这是非常痛苦的。

我能想到的一个方法是,删除我的SSH密钥并创build新的。 有没有办法删除密码,同时仍然保持相同的密钥?

简短的回答:

$ ssh-keygen -p 

这会提示您input密钥文件位置,旧密码和新密码(可以留空以便没有密码)。

如果你想在没有提示的情况下在一行上完成所有操作,请执行以下操作:

 $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] 

重要提示:当执行命令时,他们通常会以明文forms(包括所有提供的参数(即本例中的密码短语))logging在~/.bash_history文件(或类似文件)中。 因此,build议您使用第一个选项,除非您有特殊的理由不这样做。

您可能需要考虑使用ssh-agent,它可以caching一段时间的密码。 最新版本的gpg-agent也支持ssh-agent使用的协议。

您可能需要将以下内容添加到您的.bash_profile(或等效项)中,该项在login时启动ssh-agent。

 if [ -f ~/.agent.env ] ; then . ~/.agent.env > /dev/null if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then echo "Stale agent file found. Spawning new agent… " eval `ssh-agent | tee ~/.agent.env` ssh-add fi else echo "Starting ssh-agent" eval `ssh-agent | tee ~/.agent.env` ssh-add fi 

在一些Linux发行版(Ubuntu,Debian)上,你可以使用:

 ssh-copy-id -i ~/.ssh/id_dsa.pub username@host 

这会将生成的ID复制到远程机器并将其添加到远程钥匙串。

你可以在这里和这里阅读更多。