不久前,我注意到我的 ssh-agent 中有三个无法删除的密钥。 ssh-add -l
显示了三个密钥;我运行了ssh-add -D
,然后被告知“所有身份均已删除。”;但随后立即ssh-add -l
显示了相同的三个密钥。
如果我注销然后重新登录,密钥仍然在那里。如果我重新启动机器,密钥仍然在那里。如果我删除 中的密钥环目录/tmp
,我将无法再连接ssh-agent
,但注销并重新登录后,密钥又回来了。它们是坚不可摧的。
据我所知,这些密钥是我的,不是别人的。我可以用它们访问我常用的本地服务。但是当我再次使用 添加其中一个密钥时ssh-add
,给出私钥文件的路径,新密钥在 的输出中的外观有所不同ssh-add -l
:
2048 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f /home/jruser/.ssh/jruser-keyname-20110418 (RSA)
与原版相比:
2048 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f jruser 04/18/2011 keyname (RSA)
有什么方法可以合理地解释这种行为吗?我想实际上有两个问题:
如何在重启后保留密钥?
ssh
根据我的基本知识,密钥必须始终手动添加。为什么要
ssh-agent -D
骗我删除身份?
答案1
看起来这可能是一个错误。我在 Ubuntu 10.10 中遇到了类似的行为。谷歌搜索发现了 Debian 的错误报告:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472477
为了删除我显示的额外密钥,我只是将它们移出 ~/.ssh 目录。
答案2
您的密钥以文件形式存储在隐藏目录中:/home/jruser/.ssh/,这就是它们在重启后仍然存在的原因。我猜是 ssh-add -D 将它们从内存中删除,但当您重启时,它们会从 .ssh 目录中读取,因此您又可以拥有它们了。