我有一个自动化流程,定期通过 VPN 向大约 120 台不同的机器进行 SSH 连接。有时这些机器会切换 IP 地址并使用之前由不同机器使用的地址。这会导致通过 SSH 登录时主机密钥检查出现问题。
为了避免这种情况,在通过 SSH 访问每台机器之前,该进程会运行以从known_hostsssh-keygen -R
中删除主机密钥。
不幸的是,每次运行此命令时,它似乎都会创建一个名为known_hosts.ABCDEFGH的known_hosts备份文件,其中“ABCDEFGH”是随机字母序列。
最近,我在运行自动化流程的服务器上发现了大约 750,000 个这样的备份文件,占用了 34GB 的硬盘空间。
除了每次运行时删除known_hosts.*ssh-keygen
之外,有没有办法防止这些文件的累积?即,有没有办法防止在修改known_hostsssh-keygen
文件时备份该文件?
我注意到 Ubuntu 22.04 和 MacOS 13.6.6 上都存在这种行为。
正如评论中指出的那样,这些实际上是临时文件,由于某种原因,
ssh-keygen
无法删除(尽管操作本身成功)。事实证明,我的自动化过程
ssh-keygen
同时在多个线程上并发运行(有时 50-100 个实例同时启动)。我猜这在操作known_hostsssh-keygen
文件时会造成一点阻塞。同步线程并序列化所有
ssh-keygen
运行完全解决了该问题。它确实强调了从多个线程/进程同时运行的风险
ssh-keygen
,我想知道这是否是 中的一个错误ssh-keygen
,但目前我的修复似乎有效。无论如何,我在这里ssh-keygen
提交了一个错误报告以防万一。另一种“修复”方法是通过将选项设置为 来完全不使用known_hosts文件,这样就可以完全绕过这个问题。
UserKnownHostsFile
/dev/null