问题导读:
1.为什么编写脚本脚本来实现密码互通?
2.如何编写脚本来实现多节点互通?
在搭建集群的过程中,面对大量的集群,如果我们每台部署,每天都进行配置,那么我们的任务量是非常大。方法有两种
1.使用工具
2.编写shell脚本。
这里采用的是脚本的方式。
简单介绍:
SSH无密码互通原理很简单,假设现在有两台服务器A和B,服务器A要访问服务器B。两台服务器都有用户hadoop,先登录到A机器上来
机器A执行ssh-keygen -t rsa,之后会生成id_rsa文件和id_rsa.pub文件。然后将A生成的id_rsa.pub文件重命名(避免覆盖)后拷贝到B机器上的/home/hadoop/.ssh/目录下:
拷贝命令:scp id_rsa.pub B:/home/hadoop/.ssh/id_rsa.pub.A
然后,将id_rsa.pub.A文件内容追加到B机器上的/home/hadoop/.ssh/
目录下的authorized_keys文件中:
追加命令:cat id_rsa.pub.A >> authorized_keys
这样就可以有机器A无密码直接登录机器B了,如果想从机器B无密码
登录到机器A,则需将B机器公钥信息(id_rsa.pub)追加到A机器中的
authorized_keys文件中。这样就可以实现A、B机器的无密码互访了。
SSH脚本编写:
当需要配置的机器有很多台时,可以使用脚本批量完成配置:
下面的脚本必须满足三个条件才能执行:
1)必须在节点列表{node001, node002, node003}中的一个节点运行
2)必须使用root账户运行脚本
3)nodexxx各节点的/etc/hosts中必须包含如下信息:
10.0.0.8 node001
10.0.0.9 node002
10.0.0.10 node003
#!/bin/bash
node=(node001 node002 node003) # hostname for each node
username=hadoop # username to be interconnected
homename=$username # home dir, i.e. home/zhangyang
if [ "$username" = "root" ];
then
homename=root
else
homename=home/$username
fi
for((i=0; i<${#node}; i++))
do
ssh $username@${node} 'ssh-keygen -t rsa; chmod 755 ~/.ssh'
done
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
echo "batch authorized_keys created..."
echo "start scp..."
#scp node003:/$homename/.ssh/authorized_keys /$homename/.ssh/node003.key
for((i=0; i<${#node}; i++))
do
scp ${node}:/$homename/.ssh/id_rsa.pub /$homename/.ssh/${node}.key
echo "scp from ${node} finished..."
done
echo "append key to authorized_keys..."
for((i=0; i<${#node}; i++))
do
cat /$homename/.ssh/${node}.key >> /$homename/.ssh/authorized_keys
echo "append ${node}.key finished..."
done
echo "append all key finished..."
loop=${#node}
let subloop=loop-1
echo "starting scp complete authorized_keys to ${node[1]}~${node[subloop]}"
for((i=1; i<${#node}; i++))
do
scp /$homename/.ssh/authorized_keys ${node}:/$homename/.ssh/authorized_keys
echo "scp to ${node} finished..."
done
echo "scp all nodes finished..."
# delete intermediate files
rm -rf /$homename/.ssh/*.key
echo "all configuration finished..."
|