我知道hadoop操作需要ssh密钥连接。假设有五个集群,由一个namenode和四个data节点组成。通过设置ssh密钥连接,我们可以从namenode连接到datanode,反之亦然。注意,hadoop操作应该需要双向连接,这意味着据我所知,只有一方(namenode到datanode,但没有connect to from 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连接(bothways)的代码…实现它需要很多时间,而且为了避免繁重的任务,我找不到任何描述多节点ssh连接的文档。
1条答案
按热度按时间8xiog9wr1#
您只需要在主节点上创建一个公钥/私钥对,然后在循环中使用ssh copy id-i~/.ssh/id\u rsa.pub$server。主人应该在循环中。在namenodes上不需要反向操作。密钥必须属于运行hadoop集群的用户并由其安装。在运行脚本之后,您应该能够以hadoop用户的身份ssh到所有namenodes,而无需使用密码。