如何将密码添加到没有密码生成的OpenSSH私钥中?


212

我使用puttygen生成了OpenSSH私钥(并将其导出为OpenSSH格式)。如何在现有密钥上输入密码(我知道如何使用密码生成新密钥)?


13
如果您看到此评论,请标记其中一个答案为已接受,或写评论说他们错过了什么。谢谢!
本杰明·阿特金


如果您获得Bad passphrase了一个id_ed25519密钥但密码正确,那么您可能正在使用下级ssh-keygen来管理它。
jww

Answers:


349

尝试命令 ssh-keygen -p -f keyfile

从ssh-keygen手册页

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

 -f filename
         Specifies the filename of the key file.

例:

ssh-keygen -p -f ~/.ssh/id_rsa

5
对于那些想知道-f是什么的人:它指定输入文件。
Neikos 2015年

4
//,@sigjuice,请问您举个例子$ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa吗?这可能会帮助不知道如何区分公钥和私钥的人,并帮助他们更快地弄湿自己的脚。
弥敦道(Nathan Basanese)'16

由于某些原因,在MacOS 10.14上,这不会使用Proc-Type: 4,ENCRYPTED标头格式化文件,该标头与某些检查密码的应用程序不兼容。在尝试了几种方法使其工作后,最简单的解决方法是在运行Ubuntu的Docker容器中执行相同的操作,然后将密钥复制回我的Mac。
ryanbrainard

38

使用-p选项设置ssh-keygen。这使您可以更改密码而不是生成新密钥。

更改密码,如sigjuice所示:

ssh-keygen -p -f ~/.ssh/id_rsa

所需的密码将是新密码。(这假定您已将公共密钥添加~/.ssh/id_rsa.pub到您的authorized_keys文件中。)使用ssh进行测试:

ssh -i ~/.ssh/id_rsa localhost

您可以具有多个名称不同的键,以用于不同的用途。


//,请显示示例,以及如何检查该选项是否有效@BillThor?
弥敦道(Nathan Basanese)'16

我不明白。密码已设置,我看到当我尝试再次更改它时。但是,当我尝试登录到远程服务器时,并没有要求输入该密码短语,为什么?
卢卡

1
没关系。每个会话询问一次:)不知道。
卢卡

这是否意味着您必须注销并再次登录?关闭终端窗口并重新打开它对我不起作用。
西蒙H

您可以键入ssh-add -D以删除您的缓存身份。然后,尝试再次连接,它将要求您输入密码。使用ssh-add -l查看缓存的身份列表。
Scott Nedderman

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.