由于 OpenSSH StrictHostKeyChecking v9 是(恕我直言,明智的)默认值。
这使得当主机密钥更改时 SSH 拒绝连接,直到~/.ssh/known_hosts
文件中的主机密钥更改为止。这在交互使用中是没有问题的,因为警告信息已经足够清晰了。但我有很多使用 SSH 执行分布式命令的脚本。典型的调用如下所示:
ssh -nqo 'BatchMode = yes' "$chHost" "$chCmd"
然后在所有主机上循环执行。我正在寻找一种方法来更正非交互式使用的脚本中更改的主机密钥。可以使用以下命令删除旧密钥
ssh-keygen -R "$chHost"
但是在清除密钥后,软件要求我以交互方式键入“是”以接受新密钥,到目前为止我还没有找到在非交互式会话中执行此操作的方法。另一方面,我不愿意更改 StrictHostKeyChecking 设置,因为新的主机密钥只会添加到known_hosts 文件中(旧的主机密钥不会被删除),因此对于一个主机来说可能有许多(过时的)密钥在那里,我宁愿让文件尽可能干净(即:仅包含相关和最新的信息)。
作为参考,我使用的系统是 AIX 7200-05-06-2320 或 7200-05-07-2346,OpenSSH 版本是 9.2.112.2000。