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

How do I remove the passphrase for the SSH key without having to create a new key?

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

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


简短回答:

1
$ ssh-keygen -p

然后,这将提示您输入关键文件位置、旧密码和新密码(可以保留为空以不使用密码)。

如果您想在一行中完成所有操作而不需要提示,请执行以下操作:

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

重要提示:请注意,在执行命令时,它们通常以纯文本(包括所提供的所有参数,即本例中的密码)记录在您的~/.bash_history文件(或类似文件)中。因此,建议您使用第一个选项,除非您有特定的理由这样做。请注意,尽管您仍然可以使用-f keyfile,而不必指定-P-N,并且keyfile默认为~/.ssh/id_rsa,因此在许多情况下甚至不需要它。

您可能需要考虑使用ssh代理,它可以缓存密码短语一段时间。GPG代理的最新版本还支持ssh代理使用的协议。


您可能需要将以下内容添加到.bash_概要文件(或等效文件)中,该文件在登录时启动ssh代理。

1
2
3
4
5
6
7
8
9
10
11
12
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)上,您可以使用:

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

这将把生成的ID复制到远程机器上,并将其添加到远程钥匙链中。

你可以在这里读到更多。


$ ssh-keygen -p为我工作

打开Git Bash。粘贴:$ ssh-keygen -p

按Enter键进入默认位置。

输入旧密码

输入新密码-空白

确认新密码-空白

砰,输入git push密码的痛苦消失了。

谢谢!