我目前在服务器上上传了一个旧的 SSH 密钥。问题是我丢失了我的~/.ssh
目录(包含原始目录id_rsa
和id_rsa.pub
文件)。
因此,我想直接在服务器上删除旧的 SSH 密钥并上传一个新密钥。
我尝试了以下命令但没有成功:
$> ssh-add -D
有没有办法完全删除 SSH 密钥?
我目前在服务器上上传了一个旧的 SSH 密钥。问题是我丢失了我的~/.ssh
目录(包含原始目录id_rsa
和id_rsa.pub
文件)。
因此,我想直接在服务器上删除旧的 SSH 密钥并上传一个新密钥。
我尝试了以下命令但没有成功:
$> ssh-add -D
有没有办法完全删除 SSH 密钥?
请注意,至少有两个关于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
文件夹并将您的所有关键文件(您要识别的文件除外)移动到一个名为备份的单独文件夹中。如有必要,您还可以打开 seahorse 并从那里删除密钥。- 现在你应该可以
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
andid_rsa.pub
文件,但密钥仍然出现。原来
gpg-agent
是把它们缓存在一个~/.gnupg/sshcontrol
文件中;我不得不从那里手动删除它们。
如果您尝试执行与 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
除非我误解了,否则您.ssh
在本地计算机上丢失了包含您的私钥的目录,因此您想删除服务器上允许基于密钥登录的公钥。
在这种情况下,它将存储在.ssh/authorized_keys
服务器上您的主目录中的文件中。您可以使用文本编辑器编辑此文件并删除相关行,如果您可以识别它(如果它是唯一的条目,则更容易!)。
我希望该密钥不是您访问服务器的唯一方法,并且您还有其他登录和编辑文件的方式。您可以手动将新的公钥添加到authorised_keys
文件或使用ssh-copy-id
. 无论哪种方式,您都需要在服务器上为您的帐户设置密码身份验证,或使用其他身份或访问方法来访问authorized_keys
服务器上的文件。
ssh-add
将身份添加到您的 SSH 代理,该代理在本地处理您的身份管理,并且“与代理的连接通过 SSH 远程登录转发,因此用户可以安全地使用网络中任何位置的身份提供的权限。” (手册页),所以在这种情况下,我认为这不是您想要的。据我所知,如果您无法通过 SSH 登录访问所述服务器,则无法将您的公钥放到服务器上。
检查文件夹.ssh是否在您的系统上
如果没有,那么
粘贴到终端
删除现有的 SSH 密钥
rm ~/.ssh/github_rsa.pub
创建新的
创建新的 SSH 密钥 →ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
公钥已保存在“/Users/administrator/.ssh/id_ed25519.pub”中。
打开公钥保存路径。
复制 SSH 密钥→ GitLab 帐户 → 设置 → SSH 密钥 → 添加密钥
从终端再次测试→ssh -T git@gitlab.com
我在 Unity 中打开了“密码和密钥”应用程序,并从Secure Keys -> OpenSSH 密钥中删除了不需要的密钥 ,它们也自动从ssh-agent -l中删除。
我可以确认这个错误仍然存在于Ubuntu 19.04 (Disco Dingo) 中。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 指出了错误和解决方案。