我目前在服务器上上传了一个旧的SSH密钥。问题是我丢失了~/.ssh
目录(包含原始id_rsa
和id_rsa.pub
文件。
因此,我想直接在服务器上删除旧的SSH密钥并上传一个新密钥。
我尝试了以下命令但没有成功:
$> ssh-add -D
有没有办法彻底删除SSH密钥?
答案 0 :(得分:94)
请注意,ssh-add -d/-D
至少有删除密钥的错误报告至少有两个:
ssh-add -D
does not remove SSH key from gnome-keyring-daemon
memory”ssh-add -D
deleting all identities does not work. Also, why are all identities auto-added?”确切的问题是:
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建议的解决方法非常有效,总结了我的版本:
接下来我要做的是再次尝试ssh-add -D
,然后重启ssh-add -l
告诉我该代理没有身份。我确认我仍然拥有{{1 }}守护程序与ssh-agent
一起运行。因此,我添加了我最常在GitHub(ps aux | grep agent
)上使用的密钥,一切都很好!
现在,我可以使用最常用的存储库进行常规操作,如果偶尔需要访问使用RSA密钥的另一个存储库,我只需使用ssh-add ~/.ssh/id_ecdsa
为其专用一个终端即可。解决了!感谢@VonC指出错误和解决方案。
答案 5 :(得分:1)
是否在系统中检查.ssh密钥
如果不是
粘贴到终端
删除现有的.ssh密钥
新建
创建新的.ssh密钥-> ssh-keygen -t rsa -b 4096 -C“ your_email@example.com”
公钥已保存在“ / Users / administrator / .ssh / id_ed25519.pub”中。
答案 6 :(得分:0)
对我来说(OpenSuse Leap 42.3,KDE)的解决方案是重命名文件夹~/.gnupg
,该文件夹显然包含缓存的密钥和配置文件。在KDE注销/登录后,ssh-add / agent再次运行,并且从头开始创建了文件夹,但是旧密钥已全部消失。
其他方法都没有成功。