如何将密码添加到在没有密码的情况下生成的 OpenSSH 私钥?

Posted

技术标签:

【中文标题】如何将密码添加到在没有密码的情况下生成的 OpenSSH 私钥?【英文标题】:How do I add a password to an OpenSSH private key that was generated without a password? 【发布时间】:2011-04-18 15:32:06 【问题描述】:

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

【问题讨论】:

如果您看到此评论,请将其中一个答案标记为已接受或写下评论说明他们错过了什么。谢谢! 添加与更改或删除相同:***.com/questions/112396/…,更改可能相同:serverfault.com/questions/50775/… 如果您在 id_ed25519 密钥上获得 Bad passphrase 但密码正确,那么您可能使用的是低级 @ 987654325@管理它。 【参考方案1】:

因为您提到了“PuTTYgen”,并且您可能正在使用 Windows ?,所以我将引导您查看“PuTTYgen”的文档。

转到此处 [https://the.earth.li/~sgtatham/putty/0.76/htmldoc/Chapter8.html#puttygen-conversions]“导入”和“导出”SSH 私钥。这些与使用“加载”和“保存”不同,因为这些选项用于加载和保存 Putty 特定的密钥文件。

这里 [https://the.earth.li/~sgtatham/putty/0.76/htmldoc/Chapter8.html#puttygen-passphrase] 用于更改密码。为新私钥创建密码短语时,您会做同样的事情。

所以步骤是“导入”SSH 密钥,您不会被要求输入密码,因为您没有创建密码。然后更改(设置)密码并确认。然后“导出”回原来的私钥文件。

希望对其他想要使用“PuTTYgen”而不是“ssh-keygen”的人有所帮助。

【讨论】:

【参考方案2】:

你也可以使用openssl:

openssl rsa -aes256 -in ~/.ssh/your_key -out ~/.ssh/your_key.enc
mv ~/.ssh/your_key.enc ~/.ssh/your_key
chmod 600 ~/.ssh/your_key

见:https://security.stackexchange.com/a/59164/194668

【讨论】:

我想我会采取 ssh-keygen 的方式;) 感谢您提供 openssl 替代方案来完成任务。【参考方案3】:

试试命令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

【讨论】:

对于那些想知道 -f 是什么的人:它指定输入文件。 // ,@sigjuice,你能发一个例子吗,比如$ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa?这可能会帮助那些不知道如何区分公钥和私钥的人,并帮助他们更快地弄湿自己的脚。 出于某种原因,在 MacOS 10.14 上,这不会使用 Proc-Type: 4,ENCRYPTED 标头格式化文件,这与某些检查密码短语的应用程序不兼容。在尝试了几种方法让它工作之后,最简单的解决方法就是在运行 Ubuntu 的 Docker 容器中做同样的事情,然后将密钥复制回我的 Mac。 我仍然可以在不输入任何密码的情况下以明文形式读取我的ssh私钥,所以我猜上面的命令还不够!? (我不希望黑客能够在不知道额外密码的情况下读取我的私钥)【参考方案4】:

对 ssh-keygen 使用 -p 选项。这允许您更改密码而不是生成新密钥。

根据 sigjuice 显示更改密码:

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

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

ssh -i ~/.ssh/id_rsa localhost

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

【讨论】:

// ,请您举个例子,以及如何检查该选项是否有效,@BillThor? 我不明白。密码已设置,当我再次尝试更改时,我看到了。但是当我尝试登录远程服务器时,它并没有要求输入这个密码,为什么? 没关系。它每次会话询问一次 :) 不知道。 这是否意味着您必须退出并重新登录?关闭终端窗口并重新打开它对我不起作用。 您可以输入ssh-add -D 来删除您缓存的身份。然后,尝试再次连接,它会询问您的密码。使用 ssh-add -l 查看您的缓存身份列表。

以上是关于如何将密码添加到在没有密码的情况下生成的 OpenSSH 私钥?的主要内容,如果未能解决你的问题,请参考以下文章

在没有用户密码的情况下生成 AD Kerberos 票证

如何使用 iText 将没有所有者密码的仅用户密码添加到 PDF

如何在没有 TouchID 和密码的情况下使用 Secure Enclave?

PHP imap_open(),OpenSSL,并且没有密码

如何在没有密码提示的情况下执行 mysqldump?

如何在没有密码提示的情况下执行 mysqldump?