shell脚本实现集群免密码登录
说明:1.hadoop集群,共三十台机器,之间相互免密码登录
2.用到expect命令
3.合并公钥:机器全部挂在nas上的(相当于共享目录吧),合并文件放在nas上,遍历机器公钥,
追加到nas上的文件,然后分发至各台机器
4.编写好存放ip的配置文件,读取配置文件,循环遍历ip
5.需要编写一个登录master机器的脚本,下发到各台机器,遍历登录各台机器时,执行该脚本,
从而实现slave登录master(第一次登录要输入密码,省去了几十台slave登录master这一步)
-----------------------------------------------------------------------------------主脚本-------------------------------------
#!/bin/bash
echo -e "\n-------------####开始生成公钥私钥并且合并下发文件###---------------------\n"
if [[ $1 = "" || $2 = "" ]]; then
echo "请依次传入密码,nas路径 eg:sshId_rsa.sh password /home/ap/nas"
else
password=$1
ips=`cat /tmp/root_hosts |awk '{print $3}'`
for ip in $ips
do
echo -e "\n\n开始生成 $ip 公钥私钥并且合并 \n"
/usr/bin/expect<<EOF
spawn ssh $ip
expect {
"(yes/no)?" {
send "yes\r"
expect "*assword" {
send "$password\r"
}
}
"*assword" {
send "$password\r"
}
}
expect "*]#"
send "ssh-keygen -t rsa\r"
expect "*id_rsa)"
send "\r"
expect {
"*passphrase)"
{
send "\r"
}
"*write (y/n)?"
{
send "y\r"
expect "*passphrase)"
send "\r"
}
}
expect "*again"
send "\r"
expect "*]#"
send "touch $2/authorized_keys\r"
expect "*]#"
send "cat /home/ap/pcts/.ssh/id_rsa.pub >> $2/authorized_keys\r"
expect eof
EOF
echo -e "\n\n生成 $ip 公钥私钥并且合并结束\n"
done
for ip in $ips
do
/usr/bin/expect<<EOF
spawn scp $2/authorized_keys pcts@$ip:/home/ap/pcts/.ssh/
expect {
"(yes/no)?" {
send "yes\r"
expect "*assword" {
send "$password\r"
}
}
"*assword" {
send "$password\r"
}
}
expect eof
EOF
done
for ip in $ips
do
echo -e "\n--$ip 登录masters---\n"
/usr/bin/expect<<EOF
spawn scp /tmp/slaveTmasters.sh pcts@$ip:/home/ap/pcts/
expect {
"(yes/no)?" {
send "yes\r"
expect "*assword" {
send "$password\r"
}
}
"*assword" {
send "$password\r"
}
}
spawn ssh $ip
expect {
"(yes/no)?" {
send "yes\r"
expect "*assword" {
send "$password\r"
}
}
"*assword" {
send "$password\r"
}
}
expect "*]#"
send "/home/ap/pcts/slaveTmaster.sh\r"
expect eof
EOF
echo -e "\n--$ip 登录masters完毕!---\n"
done
rm $2/authorized_keys
echo -e "\n-------------###已删除$2/authorized_keys###---------------------\n"
echo -e "\n-------------###生成公钥私钥并且合并下发文件结束###---------------------\n"
fi
------------------------------------------配置文件root_hosts--------------------------------------------------------------------
128.196.118.67 W117PC02VM18 Master01
128.196.118.68 W117PC05VM18 Master02
128.196.118.69 W117PC01VM19 Slave01
128.196.118.70 W117PC06VM18 Slave02
128.196.118.71 W117PC02VM19 Slave03
128.196.118.72 W117PC03VM19 Slave04
...............
------------------------------------------在各台机器执行的登录master的脚本----------------------------------------------
#!/bin/bash
#
echo -e "\n-------------####Slave登录Master###---------------------\n"
password="pcts"
master="Master01,Master02"
mArr=(${ string//,/ })
for mip in ${mArr[@]}
do
/usr/bin/expect<<EOF
spawn ssh $mip
expect {
"(yes/no)?" {
send "yes\r"
expect "*assword" {
send "$password\r"
}
}
"*assword" {
send "$password\r"
}
}
expect eof
EOF
done

浙公网安备 33010602011771号