如何在不创建新密钥的情况下删除SSH密钥的密码?

时间:2020-03-06 14:31:01  来源:igfitidea点击:

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

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

解决方案

简短答案:

$ ssh-keygen -p

然后,这将提示我们输入密钥文件位置,旧密码短语和新密码短语(可以将其保留为空白而没有密码短语)。

如果我们希望在没有提示的情况下全部完成所有操作,请执行以下操作:

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

重要提示:请注意,执行命令时,它们通常会以明文形式(包括所提供的所有参数)(即密码短语)以纯文本格式记录在〜/ .bash_history文件(或者类似文件)中。因此,除非有特殊原因,否则建议我们使用第一个选项。

我们可能要考虑使用ssh-agent,它可以将密码短语缓存一段时间。最新版本的gpg-agent还支持ssh-agent使用的协议。

我们可能需要将以下内容添加到.bash_profile(或者等效文件)中,该文件将在登录时启动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复制到远程计算机,并将其添加到远程钥匙串。

我们可以在这里和这里阅读更多内容。