如何重置或更改GitHub SSH密钥的口令?

99

我在 Git 中忘记了我的密码短语。如何重置它?我在 Stack Overflow 上找到了两个解决方案,但我想知道重置密码短语或获取它的过程。


1
更改与添加相同:https://dev59.com/jW865IYBdhLWcg3wa-A0 - Ciro Santilli OurBigBook.com
6个回答

101
如果您生成了带有密码短语的SSH密钥,但是您忘记了此SSH密钥的密码短语,则无法恢复它。您需要生成全新的SSH密钥对或切换到HTTPS克隆,这样您就可以使用GitHub密码代替。 但是,也存在例外情况。 如果您使用OS X Keychain配置了SSH密码短语,则可能能够恢复它。
  1. 在Finder中搜索Keychain Access应用程序。
  2. 在Keychain Access中搜索SSH。
  3. 双击打开您的SSH密钥条目以打开新的对话框。
  4. 在左下角选择显示密码。
  5. 系统会提示您输入管理员密码,请在“Keychain Access”对话框中键入。
  6. 您的密码将被显示。
请参阅Github帮助-如何恢复我的SSH密钥密码短语?

1
其中一个答案在它们典型的情况下……感觉像救命稻草!特别是当谷歌搜索和Github都对你大喊这是不可能的时候! - 0xc0de
那个例外真是救命稻草,谢谢! - undefined

72

您可以通过以下方式更改私钥的密码:

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

7
这意味着 ~/.ssh/id_rsa 本身没有被加密,是吗?但如果它被加密了,我们又回到了原点。 - kostix
114
这要求输入旧的密码短语。不太有帮助。 - Navigatron
6
关于OP的问题,如果您忘记了密码,这并没有帮助。但是,如果您只是想重置密码,这就是方法! - Ken M. Haggerty
12
如果某人忘记了“当前密码”,该怎么办才能输入?错误的解决方案。 - Joel James
5
问题标题是“重置或更改”- 我在谷歌上搜索如何简单更改我的密钥密码,结果来到了这里。点赞数显示我并不是唯一一个有此需求的人。 - panepeter
显示剩余3条评论

69

简而言之,无法恢复一对SSH密钥的密码。为什么?因为出于安全原因,一开始就是这样设计的。其他人提供的答案都是更改密钥密码的正确方法,而不是恢复它们的方法。所以如果你忘记了你的密码,最好的方法是创建一个新的SSH密钥对。以下是如何生成SSH密钥并将其添加到您的GitHub帐户


2
@TechMLG 这绝对是正确的方法(请点击链接查看 GitHub 帮助文档)!我已经成功地设置了新的 SSH 密钥文件和密码。楼主应该考虑接受这个建议。 - πάντα ῥεῖ

18

可以向现有密钥添加密码短语或更改密码短语,而无需重新生成密钥对:
注意:如果密钥已经存在密码短语,则这样做将无法生效,否则您将看到:输入旧的密码短语: 然后是 错误的密码短语

$ ssh-keygen -p
Enter file in which the key is (/Users/tekkub/.ssh/id_rsa):
Key has comment '/Users/tekkub/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

如果您的密钥包含passphrase,那么没有办法恢复一对SSH密钥的passphrase。在这种情况下,您必须创建一个新的SSH密钥对。

  1. 生成SSH密钥

31
如果密钥没有设置密码,那么这很好,但是如果它们有密码且你记不住,那么这就没用了,因为你会看到:输入旧的密码短语: 然后是 密码短语错误。 - Metafaniel

5
  1. 登录您的github帐户。
  2. 转到“设置”页面(页面右上角的“扳手和螺丝刀”图标)。
  3. 进入“SSH密钥”页面。
  4. 生成新的SSH密钥(可能需要学习github在该页面提供的链接)。
  5. 使用“添加SSH密钥”链接添加您的新密钥。
  6. 验证您的新密钥是否有效。
  7. 通过在已知密钥列表中使用“删除”链接来使gitub忘记您的旧密钥。

问题是重置或更改!而不是获取一个新的。 - Jürgen K.
@jürgen-k,密语用于加密SSH密钥。这样做的整个目的是只有在您知道密码短语的情况下才能使用密钥。如果存在一种恢复或“重置”(无论那意味着什么)用于解密加密材料的密码的方法,那么这种加密系统的效用将接近于零。(请注意,SSH最常用于远程访问服务器,而不是Git)。 TLDR:在我们的情况下,“不可能”这个答案虽然正确但是毫无用处。 - kostix

-2

如果您使用的是 Linux/Mac,那么您可以删除文件 known_hosts

它位于 ~/.ssh/known_hosts,如果您想要覆盖/删除特定的 ssh 主机,则可以编辑 known_hosts 文件。

查看所有主机 => cat ~/.ssh/known_hosts 删除 know_hosts 文件 => rm -rf ~/.ssh/known_hosts


1
这个问题是关于恢复SSH密钥的密码,与known_hosts文件无关。 - root_access

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接