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


47

我在Virtual Box上运行带有一堆虚拟服务器的Ubuntu桌面,以测试东西等。过去,我也一直在连接到其他种类的远程VPS Linux Box。目前,我的.ssh/known_hosts文件中有一堆密钥,其中大多数不再使用。

我想清理.ssh/known_hosts文件,但是我如何知道哪个密钥属于哪个主机?即我如何知道可以安全地删除哪些钥匙以及应该独自留下哪些钥匙?

Answers:


64

要找出已知主机名中哪个主机名称项:

 # ssh-keygen -H  -F <hostname or IP address>

要从known_hosts删除单个条目:

 # ssh-keygen -R <hostname or IP address>

27

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

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

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

并按照别人的建议去做;HashKnownHosts比这里的帮助更令人烦恼。


ssh-keyscan具有非常严格的list_of_hosts文件格式规则。每个地址后的地址只能是地址,而不能是其他空格。这包括最后一个地址之后的LF。否则,在生成的文件中会产生很多垃圾。
Nux '16

21

有困难...

默认情况下,Ubuntu将主机名散列到known_hosts文件中(这不是默认的openssh行为),从而使任何人都很难读取该文件来知道您要访问的系统。

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

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

#HashKnownHosts yes

当远程主机的配置更改并且ssh显示警告时,清理〜/ .ssh / known_hosts也很有帮助。但是,应对此谨慎,并仅对受信任的主机忽略warnnig。
Alex

6
更好的选择可能是解释如何为特定主机名生成哈希,从而允许他在known_hosts中搜索该哈希,以便他可以对其进行更新。
塞林2012年

1
完成上述更改后,只需添加一个新条目即可,例如,使用连接到新服务器ssh root@something-new-or-new-dns-alias。这将刷新原始known_hosts文件并解密主机名/ IP。
Nux

2

我的known_hosts文件中有300多个陈旧的条目。不确定它是否适用于所有系统(甚至大多数系统),但这是我的Q&D脚本。您可能需要调整匹配的字符串或位置。

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list

这在散列known_hosts文件上不起作用,并且由于发问者询问“我如何知道哪个密钥属于哪个主机”,我认为他的文件很有可能被散列了。他说他在Ubuntu上,并且theotherreceive说,Ubuntu默认是哈希值。
尼尔·梅休
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.