我在 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
是远程机器的名称)。