我正在尝试通过脚本在我的小型集群(书中介绍:Apache Hadoop Yarn)上安装 Hadoop。我已经设置了无密码 ssh 连接,如果我单独使用 pdsh 和 pdcp 都可以。问题是当我将命令放入脚本中时,pdsh 和 pdcp 失败了。我真的不明白哪里出了问题。
独立使用时有效:
pdcp -R ssh -w ^all_hosts hadoop-2.5.1.tar.gz /opt
这是不起作用的脚本的一部分:单击整个脚本这里
#!/bin/bash HADOOP_VERSION=2.5.1 install() { echo "Copying Hadoop $HADOOP_VERSION to all hosts..." pdcp -R ssh -w ^all_hosts hadoop-"$HADOOP_VERSION".tar.gz /opt ....
all_hosts 文件如下(主机名):
dave micheal jose
错误是:
micheal: Host key verification failed. pdcp@dave: micheal: ssh exited with exit code 255 jose: Host key verification failed. pdcp@dave: jose: ssh exited with exit code 255 dave: Host key verification failed. pdcp@dave: dave: ssh exited with exit code 255
答案1
“主机密钥验证失败”来自底层 SSH 进程。请参阅PDCP(1):
当使用 ssh 进行远程执行时,ssh 的 stderr 将与远程命令的 stderr 合并。当由 pdcp 调用时,如果主机密钥发生更改,ssh 无法提示确认,如果 RSA 密钥配置不正确,则无法提示输入密码等。
解决方案是连接到all_hosts
一次并接受其主机密钥或禁用(!)严格主机密钥检查对于上述主机:
$ cat ~/.ssh/config 主持人 Dave Michael Jose StrictHostKeyChecking 否 $ pdcp -R ssh -w ^all_hosts mate-terminal /opt sid0:警告:将“micheal,192.168.0.130”(ED25519)永久添加到已知主机列表中。 [...]
答案2
由于此错误来自底层 SSH 进程,我们实际上可以向其传递一个选项,以自动将主机添加到已知主机或忽略这一次的主机密钥检查。您可以使用PDSH_SSH_ARGS_APPEND
环境变量将这些选项传递给底层进程。
PDSH_SSH_ARGS_APPEND="-o StrictHostKeyChecking=no" pdcp -R ssh -w ^all_hosts hadoop-2.5.1.tar.gz /opt
此环境变量也适用于直接 pdsh。