假设这$IP
是服务器的新外部 IP 地址,这首先通过ssh-keyscan
在 localhost 上运行并生成一个临时的已知主机文件来获取服务器 SSH 密钥。然后它127.0.0.1
用给定的值替换$IP
并启动ssh
与临时已知主机文件到远程 IP 地址的会话。如果会话已建立并且密钥验证成功,则命令将完全退出。否则它将输出Host key verification failed.
消息。即使与服务器的身份验证失败,这也会起作用,因为主机密钥验证是在身份验证之前完成的。该脚本最终检查 ssh 输出是否包含给定的错误消息并返回valid
或invalid
相应地返回。
TMP_KNOWN_HOSTS=$(mktemp)
ssh-keyscan 127.0.0.1 > $TMP_KNOWN_HOSTS
sed -i "s/127\.0\.0\.1/$IP/" $TMP_KNOWN_HOSTS
RESPONSE=$(ssh -n -o "UserKnownHostsFile $TMP_KNOWN_HOSTS" -o "StrictHostKeyChecking yes" $IP true 2>&1)
if ! [[ $RESPONSE = *"Host key verification failed."* ]]; then
echo "valid"
else
echo "invalid"
fi