为了简化各系统之间的相互频繁发送公钥,可以写一下脚本:
首先在运行以下脚本之前需要安装expect,使用expect进行人机交互:
安装expect(备注:因为expect是基于tcl的,所以需要你的系统中安装有tcl)
如何检查?
[hadoop@hadoop01 ~]$ whereis tcl
tcl: /usr/lib64/tcl8.5 /usr/share/tcl8.5
如果看不到结果,请先安装tcl
安装expect:
[hadoop@hadoop01 ~]$ yum install expect
也可以从http://rpm.pbone.net下载相应发行版的rpm包
然后将下面的脚本放入/home/hadoop目录下即可。
ssh.sh 脚本主要负责模拟SSH公钥的生成,建立SSH免密登录,模拟配置SSH免密登录的过程
#!/bin/bash
BASE_HOST_LIST=$*
BASE_PASSWORD="hadoop"
#模拟SSH公钥生成的人机交互过程
sshkeygen(){
yum -y install expect
expect -c "
spawn ssh-keygen
expect {
\"ssh/id_rsa):\" {send \"\r\";exp_continue}
\"passphrase):\" {send \"\r\";exp_continue}
\"again:\" {send \"\r\";exp_continue}
}
"
}
#模拟配置SSH免密登录过程的人机交互过程
sshcopyid(){
expect -c "
spawn ssh-copy-id $1
expect {
\"(yes/no)?\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$2\r\";exp_continue}
}
"
}
#本机生成密钥对
sshkeygen
#建立SSH免密登录(包括自己)for SSH_HOST in ${BASE_HOST_LIST}do#本机生成密钥对#sshkeygensshcopyid ${SSH_HOST} ${BASE_PASSWORD}done
再来一个启动ssh.sh的脚本:
#!/bin/bash
BASE_HOST_LIST=$*
#脚本的放置目录
SCRIPT_PATH="/home/hadoop/ssh.sh"
#先让自己跑ssh.sh脚本,为了能顺利发送脚本到集群各节点
sh ${SCRIPT_PATH} ${BASE_HOST_LIST}
#把脚本发送给其他服务器
for SSH_HOST in ${BASE_HOST_LIST}
do
scp -r $SCRIPT_PATH hadoop@${SSH_HOST}:$SCRIPT_PATH
ssh ${SSH_HOST} sh ${SCRIPT_PATH} ${BASE_HOST_LIST}
done