pdsh 独立运行良好,但在脚本中不起作用

pdsh 独立运行良好,但在脚本中不起作用

我正在尝试通过脚本在我的小型集群(书中介绍: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。

相关内容