SSH 密钥的批量更新

SSH 密钥的批量更新

我最近将主服务器从 Oracle Linux 8.8 升级到 Oracle Linux 9.3。

不幸的是,在我们的许多系统上,我们仍然使用 RSA 密钥进行 ssh 身份验证,并且它们不再与 OpenSSH 8.7 一起使用。

所以我需要推出新的 ECDSA 密钥。

由于我必须对大约 150 多台服务器执行此操作,因此我尝试使用 for如下循环来简化该过程:

for a in $(grep -v "^#" /etc/hosts | grep -i "fs"  | awk '{print $2}'); do ssh-keygen -R $a; sshpass -p 'PASSWORDXYZ' ssh-copy-id -o StrictHostKeyChecking=no -i id_ecdsa $a; done

当我尝试登录任何已更改的服务器时,我收到以下提示:

$ ssh acefs150
The authenticity of host 'server1 (X.X.X.X)' can't be established.
ED25519 key fingerprint is SHA256:XYZHDKLLDJ.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:293: server2
    ~/.ssh/known_hosts:296: server3
    ~/.ssh/known_hosts:297: server4
    ~/.ssh/known_hosts:305: server24
    ~/.ssh/known_hosts:306: server26
    ~/.ssh/known_hosts:307: server180
    ~/.ssh/known_hosts:310: server185
    ~/.ssh/known_hosts:312: server88
    (105 additional names omitted)
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

这对我来说有点奇怪,因为每个服务器都应该有自己的主机密钥,不是吗?

输入“是”一次后,我再也没有被问过。

我是否以正确的方式完成整个过程,或者是否有更好的方法来做到这一点?

答案1

我不认为该消息与发出的命令严格相关。

远程主机可能已经拥有您昨天或 10 年前接受过的相同(旧)密钥。当您删除这些身份时,会弹出新的(但克隆的)ED25519 身份。

答案2

因为每个服务器都应该有自己的主机密钥,不是吗?

应该但如果有人使用黄金映像来实现主机或只是克隆现有主机而不重新生成主机密钥,就会发生这种情况。

解决这个问题将会产生更多问题,因为如果您更换了当前密钥,任何看到当前密钥的客户端都会抱怨。

mkdir /etc/ssh/oldkeys
mv /etc/ssh/*key /etc/ssh/oldkeys
mv /etc/ssh/*.pub /etc/ssh/oldkeys
ssh-keygen -A

相关内容