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


1033

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

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


9
我认为严格的答案实际上是Torsten Marek的回应。ssh-agent技巧可能是您正在寻找的东西,但这是对另一个问题的解答。
tardate

1
密码不仅是解锁SSH专用密钥的密钥,还是加密机制的一部分。一部分是您的SSH密钥,另一部分是手动输入的密码。仅当两个部分都正确时,由它们动态生成的组合密钥才有效。因此,其他密码短语与其他SSH密钥相对应(没有密码短语是“其他密码短语”的特殊情况)。
保罗

97
结束此类问题就像辩论编程语言中的其他副作用一样,因为它们是否“纯”或不纯。纯粹主义者总是run之以鼻,而其他主义者则不该死,因为这是一个有用的功能,可以使生活更轻松。ssh是必需的,即使很难,也不是完全与编程无关的……不要关闭此类问题。:|
2014年

Answers:


1929

简短答案:

$ ssh-keygen -p

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


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

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

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

请注意,尽管-f keyfile无需指定-Pnor 仍然可以使用-N,并且密钥文件默认为~/.ssh/id_rsa,所以在许多情况下甚至不需要。

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


464
明确地说:您可以只ssh-keygen -p在终端中运行。然后,它将提示您输入密钥文件(默认为我的正确文件~/.ssh/id_rsa),旧密码(输入您现在的密码)和新密码(不输入内容)。
Henrik N

34
例如 :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK '16

24
-1,用于使用户在终端中键入密码并通过进行访问~/.bash_history。最好输入:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres

5
你们应该注意,如果您在外壳程序启动命令输入空格后,该命令将不会记录~/.bash_hstoryIe。使用`ssh-keygen -p -P oldpassphrase -N“” -f〜/ .ssh / id_rsa`即可(除非那里有其他键盘记录程序)。您也可以摆脱历史记录 ..
巨大的

14
可能值得添加一行内容,这将覆盖现有文件,而不提示您输入新位置。
Lars Francke

46

$ ssh-keygen -p 为我工作

打开git bash。粘贴:$ ssh-keygen -p

按Enter键即可找到默认位置。

输入旧密码

输入新的密码-空白

确认新密码-空白

BOOM不再需要为git push输入密码的痛苦了。

谢谢!


如果在您按下Enter for $ ssh-keygen -p并且您的密钥不在默认位置时说出(/Users/yourname/.ssh/id_rsa),则可以/Users/yourname/.ssh/yourkey在提示时输入以下内容进行响应
Chigozie Orunta

37

您可能需要将以下内容添加到.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复制到远程计算机,并将其添加到远程钥匙串。

您可以在这里这里阅读更多内容。


7
现代发行版不立即启动ssh-agent吗?
Troels Arvin

在某些Linux发行版(Ubuntu,Debian)上,可以使用:ssh-copy-id -i〜/ .ssh / id_dsa.pub username @ host假设您当然可以通过这种方式访问​​。尽管它来自2008年,但可能应该对其进行编辑,以指向id_rsa.pub(是的,我可以对其进行编辑,但对他人的作品却不满意-尤其是类似这样的东西)。
Pryftan

@TroelsArvin是的。但是otoh有时会被杀死(尽管我不会遇到这种情况-除非X11可能有问题并且您必须重新启动它...否则可能就是这种情况)。在这种情况下,您必须“重新创建”它。
Pryftan

8

要更改或删除密码短语,我经常发现仅传递pf标志是最简单的,然后让系统提示我提供密码短语:

ssh-keygen -p -f <name-of-private-key>

例如:

ssh-keygen -p -f id_rsa

如果要删除密码,请输入一个空密码。

删除或更改密码的示例运行如下所示:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

将密码短语添加到没有密码短语的键时,运行看起来像这样:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.


2

Mac上,您可以将ssh私钥的密码存储在钥匙串中,这使密码的使用变得透明。如果您已登录,则可以使用,当您注销时,root用户无法使用它。删除密码不是一个好主意,因为拥有该文件的任何人都可以使用它。

ssh-keygen -K

将此添加到 ~/.ssh/config

UseKeychain yes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.