关于“主机密钥验证失败”

关于“主机密钥验证失败”

我在 2 台虚拟机中使用 Ubuntu 10.04。在一台机器上我安装了 Hudson,另一台机器运行 klocwork。场景是当我在 Hudson 中触发构建时,脚本必须成功运行并调用 VM2 中的 Klocwork。在构建脚本中,我给出了以下命令来调用机器 2 中的 Klocwork。

if [ $Klocwork = "true" ]; then
echo "Starting Klocwork Report ..."
sshpass -p 'password' ssh IP-address "sudo chmod 755 /local path/build_script_kw.sh;/local path/build_script_kw.sh $SVNID $Version"
fi
echo "Build Successfully."

当我运行脚本时,出现Host key verification failed错误。请为我提供此问题的解决方案。谢谢。

答案1

您可以使用以下命令跳过严格的主机密钥验证检查。

sshpass -p '<your_password>' ssh <your_server_ip> -o StrictHostKeyChecking=no

请注意,当文件中不存在密钥时,上述命令将解决您的问题/root/.ssh/known_host,但如果存在较旧的密钥,则必须先通过以下命令将其删除

ssh-keygen -R hostname

答案2

第一次连接到另一个系统时,您将看到远程系统的加密密钥的指纹(如果您感到疑神疑鬼,可以离线检查)。

在远程系统上,该命令ssh-keygen -lf /etc/ssh/ssh_host_rsa_key将显示第一次连接时应显示的指纹。

当您确认这是预期的指纹时,它会与远程系统的名称一起存储在文件中$HOME/.ssh/known_hosts,这样如果您尝试再次连接并发现密钥已更改,您会收到警告,提示您远程系统已更改,或者您的通信被拦截(不太可能,但仍然......)。

在这种情况下,您可能重新安装了远程系统(因此它有一个新的 SSH 密钥但名称相同),因此系统会警告您它已更改。

要纠正此问题,您需要从known_hosts文件中删除现有条目。如果您不介意再次被要求确认您连接的其他机器的身份,您可以直接删除known_hosts,下次使用 SSH 时会重新创建它。或者,您可以使用命令ssh-keygen删除有问题的密钥,方法是执行ssh-keygen -R HOSTNAME(其中HOSTNAME是远程机器的名称)。

相关内容