我目前在服务器上上传了旧的SSH密钥。问题是我丢失了~/.ssh
目录(包括原始目录id_rsa
和id_rsa.pub
文件)。
因此,我想直接在服务器上删除旧的SSH密钥并上传新的SSH密钥。
我尝试了以下命令,但未成功:
$> ssh-add -D
有没有办法完全删除SSH密钥?
我目前在服务器上上传了旧的SSH密钥。问题是我丢失了~/.ssh
目录(包括原始目录id_rsa
和id_rsa.pub
文件)。
因此,我想直接在服务器上删除旧的SSH密钥并上传新的SSH密钥。
我尝试了以下命令,但未成功:
$> ssh-add -D
有没有办法完全删除SSH密钥?
Answers:
请注意,至少有两个错误报告ssh-add -d/-D
未删除密钥:
ssh-add -D
不会从gnome-keyring-daemon
内存中删除SSH密钥 ”ssh-add -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
文件夹,然后将除要标识的密钥文件以外的所有关键文件移动到称为备份的单独文件夹中。如有必要,您也可以打开海马并从那里删除密钥。- 现在您应该可以
git push
毫无问题地进行操作了。
另一个解决方法:
您真正想要做的是
gpg-keyring-daemon
完全关闭。
转到System --> Preferences --> Startup Applications
,然后取消选择“SSH Key Agent (Gnome Keyring SSH Agent)
”框-您需要向下滚动才能找到它。您仍然会得到一个
ssh-agent
,直到现在它会正常运行:不会自动加载任何密钥,您可以运行ssh-add来添加它们,如果您想删除密钥,则可以。设想。
该评论实际上表明:
解决的办法是
gnome-keyring-manager
避免启动,这是最终要删除程序文件的执行许可才能实现的目标,这很难做到。
万一这对任何人都有帮助:我什至尝试完全删除
id_rsa
和id_rsa.pub
文件,并且密钥仍在显示。原来
gpg-agent
是将它们缓存在一个~/.gnupg/sshcontrol
文件中 ; 我不得不从那里手动删除它们。
ssh-agent
与ssh-add
所选答案有关?原始海报说他想remove the old SSH key directly on the server and upload a new one
。听起来他想~/.ssh/authorized_keys
在远程主机上进行编辑。
git clone
是使用链中的第一个密钥而不是Ubuntu框上的配置文件中的版本。坏钥匙被自动吸收并转发到Debian盒子。
id_rsa
和id_rsa.pub
文件,并且密钥仍在显示。原来gpg-agent正在将它们缓存在~/.gnupg/sshcontrol
文件中;我不得不从那里手动删除它们。
除非引起我的误会,否则您会丢失.ssh
包含本地密钥的目录,因此您要删除服务器上允许基于密钥的登录的公共密钥。在这种情况下,它将存储在.ssh/authorized_keys
服务器主目录中的文件中。您可以仅使用文本编辑器编辑此文件,如果可以识别它,则删除相关的行(即使它是唯一的条目,也更容易!)。我希望密钥不是您访问服务器的唯一方法,并且您还有其他登录和编辑文件的方法。您可以手动将新的公钥添加到authorised_keys
file或使用ssh-copy-id
。无论哪种方式,您都需要在服务器上为您的帐户设置密码验证,或者需要其他某种身份或访问方法来获取authorized_keys
服务器上的文件。
ssh-add
向ssh代理添加身份,该ssh代理在本地处理您的身份管理,并且“与该代理的连接通过SSH远程登录转发,因此用户可以安全地使用网络中任何位置的身份赋予的特权。” (手册页),因此在这种情况下,我认为这不是您想要的。据我所知,如果您无法通过ssh登录名访问该服务器,就无法将您的公钥放入服务器。
我在Unity中打开了“密码和密钥”应用程序,并从安全密钥 -> OpenSSH密钥中删除了不需要的密钥, 并且它们也自动从ssh-agent -l中删除。
~/.ssh
我可以确认此错误在Ubuntu 19.04中仍然存在。@VonC建议的解决方法非常有效,总结了我的版本:
我接下来要做的是再试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指出错误和解决方案。
检查.ssh密钥是否在系统中
如果不是
过去在航站楼
删除现有的.ssh密钥
创建新的
创建新的.ssh密钥-> ssh-keygen -t rsa -b 4096 -C“ your_email@example.com”
公钥已保存在 “ /Users/administrator/.ssh/id_ed25519.pub”中。
ssh-add -d
呢?