我的 Ubuntu 18.04 不断将我所有的 SSH 密钥添加到ssh代理启动后我无法删除它们。代理中拥有如此多的密钥会破坏对仅允许 3 或 5 次尝试的服务器的身份验证。
~ $ ssh-add -l
2048 SHA256:7mW8C9RNZ75U...ArHq+9kSZLmny0Y google_compute_engine (RSA)
2048 SHA256:OUD4Vy0LKWp2...AwNKTbdHDkjVkcU id_rsa.aws (RSA)
2048 SHA256:/Qbw+NcgXBTk...pi7bYs2eYm0k7B8 id_rsa.aws-eu (RSA)
2048 SHA256:cG5xEwfejo2O...8LqmP4gk2wAtzrk id_rsa (RSA)
2048 SHA256:5TgVaBUrlSvV...PHM46avPZIauVRY sftp-test2 (RSA)
当我尝试删除它们时,它显示“OK”,但它们仍然存在:
~ $ ssh-add -D
All identities removed.
~ $ ssh-add -l
2048 SHA256:7mW8C9RNZ75U...ArHq+9kSZLmny0Y google_compute_engine (RSA)
2048 SHA256:OUD4Vy0LKWp2...AwNKTbdHDkjVkcU id_rsa.aws (RSA)
2048 SHA256:/Qbw+NcgXBTk...pi7bYs2eYm0k7B8 id_rsa.aws-eu (RSA)
2048 SHA256:cG5xEwfejo2O...8LqmP4gk2wAtzrk id_rsa (RSA)
2048 SHA256:5TgVaBUrlSvV...PHM46avPZIauVRY sftp-test2 (RSA)
由于代理中加载了如此多的身份,我什至无法在命令行上指定显式身份,但它仍然失败:
~ $ ssh 192.168.56.5 -i ~/.ssh/test
Received disconnect from 192.168.56.5 port 22:2: Too many authentication failures
Disconnected from 192.168.56.5 port 22
我唯一能做的就是unset SSH_AUTH_SOCK
完全然后我至少可以使用ssh -i ...
但那很不方便。
长话短说
如何删除代理的所有身份和阻止它们下次再次加载?即如何让它表现得像ssh代理习惯了?
答案1
这可能是由于错误ssh-add -d/-D
不删除键。有一些关于它的错误报告,例如
- Debian Bug 报告 #472477:ssh-add -D 不会从 gnome-keyring-daemon 内存中删除 SSH 密钥
- Ubuntu:ssh-add -D 删除所有身份不起作用。另外,为什么所有身份都是自动添加的?
确切的问题是:
ssh-add -d/-D
仅从 gnome-keyring 中删除手动添加的密钥。无法删除自动添加的键。这是最初的错误,而且它仍然肯定存在。允许
ssh-add -d
应用于自动加载的密钥(并ssh-add -t X
更改自动加载的密钥的生命周期),将恢复大多数用户期望的行为。
一个可能的解决方法:
删除
ssh-add -D
所有手动添加的密钥。导航到您的
~/.ssh
文件夹,并将除您想要识别的文件之外的所有关键文件移至名为备份的单独文件夹中。如有必要,您还可以打开 Seahorse 并从其中删除密钥。
另一个解决方法:
你真正想做的是完全关闭
gpg-keyring-daemon
。转到System --> Preferences --> Startup Applications
,然后取消选择“SSH Key Agent (Gnome Keyring SSH Agent)
”框 - 您需要向下滚动才能找到它。您仍然会得到一个
ssh-agent
,只是现在它会表现得正常:没有自动加载密钥,您可以运行ssh-add
来添加它们,如果您想删除密钥,也可以。
这条评论实际上建议:
解决方案是
keep gnome-keyring-manager
从不启动,这奇怪地困难,最终通过删除程序文件的执行权限来实现。