多集群中 hadoop 连接的 ssh 密钥设置
ssh key setting for hadoop connection in mutli clusters
我知道hadoop 操作应该需要ssh 密钥连接。
假设有五个集群,由一个名称节点和四个数据节点组成。
通过设置 ssh 密钥连接,我们可以从 namenode 连接到 datanode,反之亦然。
请注意,hadoop操作应该需要双向连接,这意味着据我所知,只有一侧(namenode到datanode,但不是从datanode到namenode连接)是不可能操作hadoop的。
对于上述场景,如果我们有 50 个节点或 100 个节点,通过连接机器并键入相同的命令来配置所有 ssh-key 命令是非常费力的工作 ssh-keygen -t ...
出于这些原因,我尝试编写 shell 代码的脚本,但未能自动完成。
我的代码如下。
list.txt
namenode1
datanode1
datanode2
datanode3
datanode4
datanode5
...
cat list.txt | while read server
do
ssh $server 'ssh-keygen' < /dev/null
while read otherserver
do
ssh $server 'ssh-copy-id $otherserver' < /dev/null
done
done
然而,它没有用。正如您所理解的,代码意味着它遍历所有节点并创建密钥,然后使用 ssh-copy-id
命令将生成的密钥复制到其他服务器。但是代码不起作用。
所以我的问题是如何使用 shell 脚本编写启用 ssh 连接(双向)的代码...我花了很多时间来实现它,我找不到任何描述的文档用于避免繁重任务的多节点 ssh 连接。
只需要在主节点创建public/private密钥对,然后在循环中使用ssh-copy-id -i ~/.ssh/id_rsa.pub $server。主人应该在循环中。并且不需要在名称节点上反向执行此操作。密钥必须属于 运行 hadoop 集群的用户并由其安装。在 运行 脚本之后,您应该能够以 hadoop 用户身份通过 ssh 连接到所有名称节点,而无需使用密码。
我知道hadoop 操作应该需要ssh 密钥连接。
假设有五个集群,由一个名称节点和四个数据节点组成。
通过设置 ssh 密钥连接,我们可以从 namenode 连接到 datanode,反之亦然。
请注意,hadoop操作应该需要双向连接,这意味着据我所知,只有一侧(namenode到datanode,但不是从datanode到namenode连接)是不可能操作hadoop的。
对于上述场景,如果我们有 50 个节点或 100 个节点,通过连接机器并键入相同的命令来配置所有 ssh-key 命令是非常费力的工作 ssh-keygen -t ...
出于这些原因,我尝试编写 shell 代码的脚本,但未能自动完成。
我的代码如下。
list.txt
namenode1
datanode1
datanode2
datanode3
datanode4
datanode5
...
cat list.txt | while read server
do
ssh $server 'ssh-keygen' < /dev/null
while read otherserver
do
ssh $server 'ssh-copy-id $otherserver' < /dev/null
done
done
然而,它没有用。正如您所理解的,代码意味着它遍历所有节点并创建密钥,然后使用 ssh-copy-id
命令将生成的密钥复制到其他服务器。但是代码不起作用。
所以我的问题是如何使用 shell 脚本编写启用 ssh 连接(双向)的代码...我花了很多时间来实现它,我找不到任何描述的文档用于避免繁重任务的多节点 ssh 连接。
只需要在主节点创建public/private密钥对,然后在循环中使用ssh-copy-id -i ~/.ssh/id_rsa.pub $server。主人应该在循环中。并且不需要在名称节点上反向执行此操作。密钥必须属于 运行 hadoop 集群的用户并由其安装。在 运行 脚本之后,您应该能够以 hadoop 用户身份通过 ssh 连接到所有名称节点,而无需使用密码。