我目前在服务器上上传了一个旧的 SSH 密钥。问题是我丢失了我的~/.ssh目录(包含原始目录id_rsa和id_rsa.pub文件)。
~/.ssh
id_rsa
id_rsa.pub
因此,我想直接在服务器上删除旧的 SSH 密钥并上传一个新密钥。
我尝试了以下命令但没有成功:
$> ssh-add -D
有没有办法完全删除 SSH 密钥?
请注意,至少有两个关于ssh-add -d/-D 不 删除键的错误报告:
ssh-add -d/-D
ssh-add -D
gnome-keyring-daemon
确切的问题是:
ssh-add -d/-D仅从 gnome-keyring 中删除 手动添加 的密钥。 无法删除自动添加的密钥。 这是最初的错误,它仍然肯定存在。 因此,例如,如果您有两个不同的自动加载的 ssh 身份与两个不同的 GitHub 帐户相关联——比如工作帐户和家庭帐户——就 无法 在它们之间切换。GitHub 采用第一个匹配的,因此您始终以“家庭”用户的身份出现在 GitHub 上,无法将内容上传到工作项目。 允许ssh-add -d应用到 自动加载的 密钥(并ssh-add -t X更改自动加载的密钥的生命周期),将恢复大多数用户期望的行为。
ssh-add -d/-D仅从 gnome-keyring 中删除 手动添加 的密钥。 无法删除自动添加的密钥。 这是最初的错误,它仍然肯定存在。
因此,例如,如果您有两个不同的自动加载的 ssh 身份与两个不同的 GitHub 帐户相关联——比如工作帐户和家庭帐户——就 无法 在它们之间切换。GitHub 采用第一个匹配的,因此您始终以“家庭”用户的身份出现在 GitHub 上,无法将内容上传到工作项目。
允许ssh-add -d应用到 自动加载的 密钥(并ssh-add -t X更改自动加载的密钥的生命周期),将恢复大多数用户期望的行为。
ssh-add -d
ssh-add -t X
更准确地说,关于这个问题:
罪魁祸首是gpg-keyring-daemon: 它颠覆了 ssh-agent 的正常操作,主要是为了让它弹出一个漂亮的框,您可以在其中输入加密 ssh 密钥的密码。 它会浏览您的.ssh目录,并自动将找到的任何密钥添加到您的代理中。 它不会让你删除这些键。 我们怎么讨厌这个?让我们不要计算方式——生命太短暂了。 由于较新的 ssh 客户端在连接到主机时会自动尝试 ssh-agent 中的所有密钥,因此失败更加复杂。 如果太多,服务器将拒绝连接。 而且由于 gnome-keyring-daemon 已经自行决定了您希望您的 ssh-agent 拥有多少个密钥,并且已经自动加载了它们,并且不会让您删除它们,您就完蛋了。
罪魁祸首是gpg-keyring-daemon:
gpg-keyring-daemon
.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毫无问题地做。
gnome- keyring
git push
另一种解决方法:
您真正想要做的是完全关闭gpg-keyring-daemon。 转到System --> Preferences --> Startup Applications,然后取消选择“ SSH Key Agent (Gnome Keyring SSH Agent)”框 - 您需要向下滚动才能找到它。 你仍然会得到一个ssh-agent,只是现在它会正常运行:没有自动加载密钥,你运行 ssh-add 来添加它们,如果你想删除密钥,你可以。设想。
您真正想要做的是完全关闭gpg-keyring-daemon。 转到System --> Preferences --> Startup Applications,然后取消选择“ SSH Key Agent (Gnome Keyring SSH Agent)”框 - 您需要向下滚动才能找到它。
System --> Preferences --> Startup Applications
SSH Key Agent (Gnome Keyring SSH Agent)
你仍然会得到一个ssh-agent,只是现在它会正常运行:没有自动加载密钥,你运行 ssh-add 来添加它们,如果你想删除密钥,你可以。设想。
ssh-agent
该评论实际上表明:
解决方案是gnome-keyring-manager永远不要启动,这通过删除程序文件的执行权限最终实现了奇怪的困难。
gnome-keyring-manager
在评论中添加了另一个有趣的极端案例:
万一这对任何人都有帮助:我什至尝试完全删除id_rsaandid_rsa.pub文件,但密钥仍然出现。 原来 gpg-agent 是把它们缓存在一个~/.gnupg/sshcontrol文件中;我不得不从那里手动删除它们。
万一这对任何人都有帮助:我什至尝试完全删除id_rsaandid_rsa.pub文件,但密钥仍然出现。
原来 gpg-agent 是把它们缓存在一个~/.gnupg/sshcontrol文件中;我不得不从那里手动删除它们。
gpg-agent
~/.gnupg/sshcontrol
就像在这里一样添加时就是这种情况keygrip 。
keygrip
将您的身份验证子密钥的 keygrip 附加~/.gnupg/sshcontrol到文件中。
gpg -K --with-keygrip是列出所有密钥及其密钥的命令。
gpg -K --with-keygrip