196

我目前在服务器上上传了一个旧的 SSH 密钥。问题是我丢失了我的~/.ssh目录(包含原始目录id_rsaid_rsa.pub文件)。

因此,我想直接在服务器上删除旧的 SSH 密钥并上传一个新密钥。

我尝试了以下命令但没有成功:

$> ssh-add -D

在此处输入图像描述

有没有办法完全删除 SSH 密钥?

4

7 回答 7

159

请注意,至少有两个关于ssh-add -d/-D 删除键的错误报告:

确切的问题是:

ssh-add -d/-D仅从 gnome-keyring 中删除手动添加的密钥。
无法删除自动添加的密钥。
这是最初的错误,它仍然肯定存在。

因此,例如,如果您有两个不同的自动加载的 ssh 身份与两个不同的 GitHub 帐户相关联——比如工作帐户和家庭帐户——就无法在它们之间切换。GitHub 采用第一个匹配的,因此您始终以“家庭”用户的身份出现在 GitHub 上,无法将内容上传到工作项目。

允许ssh-add -d应用到自动加载的密钥(并ssh-add -t X更改自动加载的密钥的生命周期),将恢复大多数用户期望的行为。


更准确地说,关于这个问题:

罪魁祸首是gpg-keyring-daemon

  • 它颠覆了 ssh-agent 的正常操作,主要是为了让它弹出一个漂亮的框,您可以在其中输入加密 ssh 密钥的密码。
  • 它会浏览您的.ssh目录,并自动将找到的任何密钥添加到您的代理中。
  • 它不会让你删除这些键。

我们怎么讨厌这个?让我们不要计算方式——生命太短暂了。

由于较新的 ssh 客户端在连接到主机时会自动尝试 ssh-agent 中的所有密钥,因此失败更加复杂。
如果太多,服务器将拒绝连接。
而且由于 gnome-keyring-daemon 已经自行决定了您希望您的 ssh-agent 拥有多少个密钥,并且已经自动加载了它们,并且不会让您删除它们,您就完蛋了。

就在两天前(2014 年 8 月 21 日),这个错误仍然在 Ubuntu 14.04.4 中得到确认


一种可能的解决方法:

  • ssh-add -D删除所有手动添加的密钥。这也会锁定自动添加的密钥,但没有多大用处,因为gnome-keyring当您尝试执行git push.
  • 导航到您的~/.ssh文件夹并将您的所有关键文件(您要识别的文件除外)移动到一个名为备份的单独文件夹中。如有必要,您还可以打开 seahorse 并从那里删除密钥。
  • 现在你应该可以git push毫无问题地做。

另一种解决方法:

您真正想要做的是完全关闭gpg-keyring-daemon
转到System --> Preferences --> Startup Applications,然后取消选择“ SSH Key Agent (Gnome Keyring SSH Agent)”框 - 您需要向下滚动才能找到它。

你仍然会得到一个ssh-agent,只是现在它会正常运行:没有自动加载密钥,你运行 ssh-add 来添加它们,如果你想删除密钥,你可以。想象一下。

该评论实际上表明:

解决方案是gnome-keyring-manager永远不要启动,这通过删除程序文件的执行权限最终实现了奇怪的困难。


Ryan Lue在评论中添加了另一个有趣的极端案例:

万一这对任何人都有帮助:我什至尝试完全删除id_rsaandid_rsa.pub文件,但密钥仍然出现。

原来gpg-agent是把它们缓存在一个~/.gnupg/sshcontrol文件中;我不得不从那里手动删除它们。

就像在这里一样添加时就是这种情况keygrip

于 2014-08-23T18:37:15.597 回答
16

如果您尝试执行与 SSH 相关的操作并收到以下错误:

$ git fetch
no such identity: <ssh key path>: No such file or directory

您可以使用以下命令从 SSH 代理中删除丢失的 SSH 密钥:

$ eval `ssh-agent -s`  # start ssh agent
$ ssh-add -D <ssh key path>  # delete ssh key
于 2018-06-07T17:30:40.380 回答
9

除非我误解了,否则您.ssh在本地计算机上丢失了包含您的私钥的目录,因此您想删除服务器上允许基于密钥登录的公钥。

在这种情况下,它将存储在.ssh/authorized_keys服务器上您的主目录中的文件中。您可以使用文本编辑器编辑此文件并删除相关行,如果您可以识别它(如果它是唯一的条目,则更容易!)。

我希望该密钥不是您访问服务器的唯一方法,并且您还有其他登录和编辑文件的方式。您可以手动将新的公钥添加到authorised_keys文件或使用ssh-copy-id. 无论哪种方式,您都需要在服务器上为您的帐户设置密码身份验证,或使用其他身份或访问方法来访问authorized_keys服务器上的文件。

ssh-add将身份添加到您的 SSH 代理,该代理在本地处理您的身份管理,并且“与代理的连接通过 SSH 远程登录转发,因此用户可以安全地使用网络中任何位置的身份提供的权限。” (手册页),所以在这种情况下,我认为这不是您想要的。据我所知,如果您无法通过 SSH 登录访问所述服务器,则无法将您的公钥放到服务器上。

于 2014-08-23T18:47:14.807 回答
9

检查文件夹.ssh是否在您的系统上

  1. 转到文件夹 --> /Users/administrator/.ssh/id_ed25519.pub

如果没有,那么

  1. 打开终端。

粘贴到终端

  1. 检查用户 → ssh -T git@gitlab.com

删除现有的 SSH 密钥

  1. 删除现有的 SSH 密钥 →rm ~/.ssh/github_rsa.pub

创建新的

  1. 创建新的 SSH 密钥 →ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  2. 公钥已保存在“/Users/administrator/.ssh/id_ed25519.pub”中。

  3. 打开公钥保存路径。

  4. 复制 SSH 密钥→ GitLab 帐户 → 设置 → SSH 密钥 → 添加密钥

  5. 从终端再次测试ssh -T git@gitlab.com

于 2020-01-02T08:14:30.313 回答
6

我在 Unity 中打开了“密码和密钥”应用程序,并从Secure Keys -> OpenSSH 密钥中删除了不需要的密钥 ,它们也自动从ssh-agent -l中删除。

于 2017-06-13T11:21:21.853 回答
1

我可以确认这个错误仍然存​​在于Ubuntu 19.04 (Disco Dingo) 中。VonC 建议的解决方法非常有效,总结了我的版本:

  • 点击左上角的活动标签
  • 在出现的搜索框中,开始输入“启动应用程序”
  • 单击“启动应用程序”图标
  • 在弹出的框中,选择 gnome 密钥环管理器应用程序(不记得 GUI 上的确切名称,但它足够独特)并将其删除。

接下来,我ssh-add -D再次尝试,重启后ssh-add -l告诉我代理没有身份。我确认我仍然让ssh-agent守护进程运行ps aux | grep agent. 所以我添加了我最常用于 GitHub 的密钥 ( ssh-add ~/.ssh/id_ecdsa),一切都很好!

现在我可以使用我最常用的存储库进行正常操作,如果我偶尔需要访问另一个使用 RSA 密钥的存储库,我只需将一个终端专用于它export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub"。解决了!归功于 VonC 指出了错误和解决方案。

于 2019-07-25T11:02:22.120 回答
0

我的解决方案(openSUSE Leap 42.3,KDE)是重命名~/.gnupg显然包含缓存密钥和配置文件的文件夹。

KDE 注销/登录后,ssh-add/agent 再次运行,文件夹从头开始创建,但旧密钥全部消失。

其他方法我没有成功。

于 2019-10-21T13:23:46.993 回答