如何自动将条目添加到 .ssh/known_hosts?

Dop*_*oti 5 ssh fingerprint

我管理很多主机,每次我ssh第一次进入新批次时,告诉yes每个主机的安全 shell 客户端我接受主机密钥指纹以添加到~/.ssh/known_hosts. 如果我们认为我确信实际上没有泄露的主机密钥,那么有什么方法可以自动执行此操作吗?我不想禁用后续连接的密钥检查。

为了便于讨论,假设我在文本文件 .txt 中有所有主机的列表hostlist.txt

Dop*_*oti 3

ssh-keyscan将检查但不验证远程主机密钥指纹。遍历主机列表并附加到~/.ssh/known_hosts

while read host; do
    if entry=$(ssh-keyscan $host 2> /dev/null); then
        echo "$entry" >> ~/.ssh/known_hosts
    fi
done < hostlist.txt
Run Code Online (Sandbox Code Playgroud)

  • keyscan 默认是 `-t rsa` 但现在 EC 密钥很常见,不需要迭代,只需 `ssh-keyscan -t rsa,ecdsa,ed25519 $(cat hostlist.txt) &gt;&gt;~/.ssh/known_hosts` (也许还有`,dsa`,具体取决于您的环境)或避免重复`... $(grep -Fvf &lt;(cut -f1 -d' ' ~/.ssh/known_hosts | tr ',' '\n') 主机列表.txt) ...` (2认同)