如何管理我的 .ssh/known_hosts 文件

Luk*_*uke 59 ssh

我在 Virtual Box 中运行带有一堆虚拟服务器的 Ubuntu 桌面来测试内容等等。过去我也一直连接到其他类型的远程 VPS Linux 机器。目前我的.ssh/known_hosts文件中有一大堆密钥,其中大部分不再使用。

我想清理我的.ssh/known_hosts文件,但我怎么知道哪个密钥属于哪个主机?即我怎么知道哪些键我可以安全地移除,哪些我应该不理会?

mik*_*ner 78

要找出 known_hosts 中已知主机名的条目:

 # ssh-keygen -H  -F <hostname or IP address>
Run Code Online (Sandbox Code Playgroud)

从 known_hosts 中删除单个条目:

 # ssh-keygen -R <hostname or IP address>
Run Code Online (Sandbox Code Playgroud)

  • 最好记住,参数的格式也可以是“[ip 地址]:端口” (2认同)

fre*_*eit 28

如果您有所有主机的列表,则可以执行以下操作

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

这将使用基于扫描主机的新生成的文件覆盖您的 .ssh/known_hosts 文件。

并且按照theotherreceive的建议去做;HashKnownHosts 在这里比帮助更烦人。


the*_*ive 27

有困难...

默认情况下,Ubuntu 对known_hosts 文件的主机名进行哈希处理(这不是默认的openssh 行为),以使任何阅读该文件的人都难以知道您访问的是哪些系统。

如果您真的想清除文件,最简单的选择可能是删除它并在出现时检查您知道的服务器的密钥,但实际上我只是不理会known_hosts。

您可以通过注释掉 /etc/ssh/ssh_config 中的选项来阻止新主机条目被散列

#HashKnownHosts yes
Run Code Online (Sandbox Code Playgroud)

  • 更好的选择可能是解释如何为特定主机名生成散列,允许他在 known_hosts 中搜索该散列,以便他可以更新它。 (8认同)