如何删除ssh密钥?

时间:2014-08-23 18:13:16

标签: git ssh git-svn ssh-keys ssh-keygen

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

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

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

$> ssh-add -D

enter image description here

有没有办法彻底删除SSH密钥?

7 个答案:

答案 0 :(得分:94)

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

确切的问题是:

  

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

     

因此,例如,如果您有两个不同的自动加载的ssh身份与两个不同的GitHub帐户相关联 - 比如工作和家庭 - 那么无法在它们之间切换。 GitHubtakes匹配的第一个,所以你总是作为GitHub的“主页”用户出现,无法将内容上传到工作项目。

     

允许ssh-add -d应用于自动加载的键(以及ssh-add -t X来更改自动加载的密钥的生命周期),可以恢复大多数用户期望的行为。< / p>


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

  

罪魁祸首是gpg-keyring-daemon

     
      
  • 它破坏了ssh-agent的正常操作,主要是因为它可以弹出一个漂亮的盒子,你可以在其中键入加密的ssh密钥的密码。
  •   
  • 它会戳穿您的.ssh目录,并自动将找到的所有密钥添加到您的代理。
  •   
  • 它不会让你删除这些键。
  •   
     

我们怎么讨厌这个?我们不计算方法 - 生命太短暂。

     

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

此错误仍在Ubuntu 14.04.4中得到确认,最近两天前(2014年8月21日)


可能的解决方法:

  
      
  • 执行ssh-add -D删除所有手动添加的密钥。这也锁定了   自动添加的密钥,但用量不大,因为gnome-keyring会在您尝试执行git push时要求您解锁它们。
  •   
  • 导航到您的~/.ssh文件夹,将除了您要识别的密钥文件之外的所有密钥文件移到名为backup的单独文件夹中。如有必要,您也可以打开海马并从那里删除钥匙。
  •   
  • 现在你应该可以毫无问题地git push了。
  •   

另一种解决方法:

  

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

     

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

This comments实际建议:

  

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

答案 1 :(得分:6)

除非我误解,否则您在本地计算机上丢失了包含私钥的.ssh目录,因此您要删除服务器上允许基于密钥登录的公钥。在这种情况下,它将存储在服务器上主目录的.ssh/authorized_keys文件中。您可以使用文本编辑器编辑此文件,如果可以识别,则删除相关行(如果它是唯一的条目,则更容易!)。我希望密钥不是您访问服务器的唯一方法,并且您还有其他一种登录和编辑文件的方法。您可以手动将新公钥添加到authorised_keys文件或使用ssh-copy-id。无论哪种方式,您都需要在服务器上为您的帐户设置密码身份验证,或者使用其他身份或访问方法来访问服务器上的authorized_keys文件。

ssh-add向您的ssh代理添加身份,该代理在本地处理您的身份管理,并且&#34;与代理的连接通过SSH远程登录转发,因此用户可以使用身份给出的权限以安全的方式在网络中的任何地方。&#34; (手册页),所以我不认为在这种情况下你想要的是什么。据我所知,如果没有您通过ssh登录访问该服务器,它无法将您的公钥发送到服务器上。

答案 2 :(得分:4)

我打开了#34;密码和密钥&#34;我的Unity中的应用程序并从安全密钥中移除了不需要的密钥 - &gt; OpenSSH密钥 它们也自动从 ssh-agent -l <​​/ em>中删除。

答案 3 :(得分:4)

如果您尝试执行与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

答案 4 :(得分:1)

我可以确认Ubuntu 19.04中仍然存在此错误。 @VonC建议的解决方法非常有效,总结了我的版本:

  • 单击左上角的“活动”标签
  • 在出现的搜索框中,开始输入“启动应用程序”
  • 单击“启动应用程序”图标
  • 在弹出的框中,选择gnome钥匙圈管理器应用程序(在GUI上不能记住确切的名称,但名称足够鲜明),然后将其删除。

接下来我要做的是再次尝试ssh-add -D,然后重启ssh-add -l告诉我该代理没有身份。我确认我仍然拥有{{1 }}守护程序与ssh-agent一起运行。因此,我添加了我最常在GitHub(ps aux | grep agent)上使用的密钥,一切都很好!

现在,我可以使用最常用的存储库进行常规操作,如果偶尔需要访问使用RSA密钥的另一个存储库,我只需使用ssh-add ~/.ssh/id_ecdsa为其专用一个终端即可。解决了!感谢@VonC指出错误和解决方案。

答案 5 :(得分:1)

是否在系统中检查.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

答案 6 :(得分:0)

对我来说(OpenSuse Leap 42.3,KDE)的解决方案是重命名文件夹~/.gnupg,该文件夹显然包含缓存的密钥和配置文件。在KDE注销/登录后,ssh-add / agent再次运行,并且从头开始创建了文件夹,但是旧密钥已全部消失。

其他方法都没有成功。