我有一个包含~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
以进行脚本编写。
答案 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,名称还是哈希列出条目,它都会对条目进行集群。