如何安全地将主机列表添加到known_hosts文件

时间:2018-05-22 17:04:10

标签: linux bash ssh

我有一个包含~1000个主机的文件,每行一个主机。对于每个主机,我想检查known_hosts文件中是否已存在主机条目。如果没有,我想将主机添加到known_hosts文件。否则,我想更新现有条目。我想使用-H选项来散列known_hosts中的所有条目。我已经运行了命令ssh-keygen -H ~/.ssh/known_hosts来散列现有条目。

这是一个简单的循环,我把它放在一起:

while read LINE; do
    # Remove entry if it exists
    ssh-keygen -R $LINE
    # Append new hashed key to file
    ssh-keyscan -H $LINE >> ~/.ssh/known_hosts
done < $HOST_FILE

这种方法安全吗?如果没有,推荐的方法是什么?我这样做的原因是禁用键入“yes”1000次以允许将每个新主机添加到known_hosts以进行脚本编写。

1 个答案:

答案 0 :(得分:0)

这里有什么互动?您将数据传输到while循环中,循环中的任何命令都不涉及用户交互性。我认为这是安全的。

注意:ssh-keyscan会将评论删除到标准错误,您可能希望将其过滤掉。当请求的主机不存在时,您可能也不需要ssh-keygen中的错误:

while read LINE; do
    # Remove entry if it exists
    ssh-keygen -R "$LINE" 2>/dev/null
    # Append new hashed key to file
    ssh-keyscan -H "$LINE" >> ~/.ssh/known_hosts 2>/dev/null
done < "$HOST_FILE"

您可能也对ssh-hosthashes感兴趣,这是我之前写的一个脚本,用于查找known_hosts个文件中的重复条目。这会通过公钥查找重复项,因此无论是按IP,名称还是哈希列出条目,它都会对条目进行集群。