我正在尝试在我们所有的机器上一台一台地安装特定的软件,所以我决定使用pdsh
.默认情况下,它将同时在多台机器上并行运行,但我将使用该-f
选项将其限制为一次在每台机器上运行。
只是为了玩它,我决定运行以下命令,但出现错误:
david@machine0:~$ sudo pdcp -w machine1 abc.tar.gz /home/david
machine1: Host key verification failed.
pdcp@machine0: machine1: ssh exited with exit code 255
我在这里做错了什么?
答案1
如果你四处搜寻,会发现什么
主机密钥验证失败
意味着,您将找到足够的信息来解决您的问题。您的情况的问题是您在用户(sudo)pdcp
下运行。root
这真的是你想要的吗?如果没有,则不运行它sudo
,它将 Just Work TM。
如果您确实需要pdcp
在以下环境下运行sudo
,则还需要在以下环境下进行主机密钥验证sudo
:
sudo ssh machine1
会让你这样做。它将提示您进行密钥验证,然后将新条目存储在~/.ssh/known_hosts
.你pdcp
应该从那个时候开始工作。
手册页的最后一条注释pdcp
:
当使用 ssh 进行远程执行时,ssh 的 stderr 会与远程命令的 stderr 折叠在一起。当由 pdcp 调用时,如果主机密钥更改,则 ssh 无法提示确认;如果 RSA 密钥配置不正确,则无法提示输入密码等。最后,只有当底层 ssh 实现支持它时,连接超时才可以通过 ssh 进行调整,并且 pdsh 已构建为使用正确的选项。
如果您想使用,您需要设置 pubkey 身份验证pdcp
。
答案2
“主机密钥验证失败”来自底层 SSH 进程。看磷酸二氢钙(1):
当使用 ssh 进行远程执行时,ssh 的 stderr 会与远程命令的 stderr 折叠在一起。当由 pdcp 调用时,如果主机密钥更改,则 ssh 无法提示确认;如果 RSA 密钥配置不正确,则无法提示输入密码等。
解决方案是连接到中的所有主机all_hosts
一次之前并接受其主机密钥或禁用(!)严格的主机密钥检查对于所述主机:
$ cat ~/.ssh/config 主持人大卫·迈克尔·何塞 StrictHostKeyChecking 否 $ pdcp -R ssh -w ^all_hosts abc.tar.gz /home/david sid0:警告:将“david,xxxx”(ED25519)永久添加到已知主机列表中。 [...]