Linux自动化互信配置脚本
我们在安装部署hadoop、kafka等集群环境时,往往需要在每个节点去配置ssh免秘钥登录的互信操作。如果集群节点非常多的情况,将会带来很大的工作量,因此开发一个自动化互信配置脚本就显得很有必要。自动化互信配置脚本: 根据设置好的HOSTS,自动化的配置与所有的主机的互信。#!/bin/bash# auto_mutual_trust.shset -eWORKDIR=`cd $(dirname $
背景说明:
我们在安装部署hadoop、kafka等集群环境时,往往需要在每个节点去配置ssh免秘钥登录的互信操作。如果集群节点非常多的情况,将会带来很大的工作量,因此开发一个自动化互信配置脚本就显得很有必要。
使用方式:
- 前提,需要配置每个节点hostname和用户密码,用户密码必须相同,例如:
hostnamectl set-hostname hadoop01;echo ‘1qaz!QAZ’ | passwd --stdin root
hostnamectl set-hostname hadoop02;echo ‘1qaz!QAZ’ | passwd --stdin root
hostnamectl set-hostname hadoop03;echo ‘1qaz!QAZ’ | passwd --stdin root
hostnamectl set-hostname hadoop04;echo ‘1qaz!QAZ’ | passwd --stdin root
hostnamectl set-hostname schedule;echo ‘1qaz!QAZ’ | passwd --stdin root
- 首先,将【传送脚本】和【自动化互信配置脚本】放到集群中的其中一个节点,
- 其次,只需要配置一个节点(脚本所在节点)的/etc/hosts映射文件,
例如:
192.168.1.28 hadoop01
192.168.1.29 hadoop02
192.168.1.30 hadoop03
192.168.1.31 hadoop04
192.168.1.32 schedule
- 最后,只需要执行【传送脚本】即可,在配置第一个节点时需要输入三次密码,然后就可以执行整个过程。
传送脚本
将自动化互信脚本发布到各个节点并执行。
#!/bin/bash
# scp.sh
set -e
WORKDIR=`cd $(dirname $0);pwd`
HOSTS=(
hadoop01
hadoop02
hadoop03
hadoop04
schedule
)
for host in ${HOSTS[*]}
do
echo "=========== start host: "$host " ===========";
#若不存在为真,则创建;若不存在为假,则不创建
set +e
ssh -p 22 $host "[[ ! -d $WORKDIR ]] && mkdir -p $WORKDIR"
set -e
scp $WORKDIR/auto_mutual_trust.sh $USER@$host:$WORKDIR;
scp /etc/hosts $USER@$host:/etc;
ssh -p 22 $host "sh $WORKDIR/auto_mutual_trust.sh"
done
自动化互信配置脚本
自动化互信配置脚本: 根据设置好的HOSTS,自动化的配置与所有的主机的互信。
#!/bin/bash
# auto_mutual_trust.sh
set -e
WORKDIR=`cd $(dirname $0);pwd`
USER=root
PWD="xxx"
HOSTS=(
hadoop01
hadoop02
hadoop03
hadoop04
schedule
)
#生产秘钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa;
yum -y install expect
#互信函数
function autoMutualTrust(){
#ssh互信
expect -c "
spawn ssh-copy-id -o StrictHostKeyChecking=no ${USER}@${1}
expect \"password:\"
send \"${PWD}\r\"
expect eof
"
}
for host in ${HOSTS[*]}
do
echo "trust host: "$host;
autoMutualTrust $host;
done
其他场景互信脚本
#!/bin/bash
# auto_mutual_trust.sh
set -e
#互信函数
function autoMutualTrust(){
#TMP_SCRIPT=tmp_script.sh
#echo "#!/usr/bin/expect">$TMP_SCRIPT
#echo "spawn ssh-copy-id -o StrictHostKeyChecking=no $1@$(hostname)">>$TMP_SCRIPT
#echo "expect *password: ">>$TMP_SCRIPT
#echo "send $1\r">>$TMP_SCRIPT
#echo "expect eof ">>$TMP_SCRIPT
#chmod +x $TMP_SCRIPT
#/usr/bin/expect $TMP_SCRIPT
#rm $TMP_SCRIPT
#同上,但更简洁
expect -c "
spawn ssh-copy-id -o StrictHostKeyChecking=no ${1}@$(hostname)
expect \"password:\"
send \"${1}\r\"
expect eof
"
}
#配置root用户本身的互信
echo root | passwd --stdin root
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
autoMutualTrust root
#创建hive用户及配置hive用户本身的互信
useradd hive
echo 'hive ALL=(ALL) NOPASSWD: ALL' >>/etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
echo hive | passwd --stdin hive
su - hive <<EOF
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa;
expect -c "
spawn ssh-copy-id -o StrictHostKeyChecking=no hive@$(hostname)
expect \"password:\"
send \"hive\r\"
expect eof
"
exit;
EOF
#配置root用户免密登录至hive用户的互信
autoMutualTrust hive
更多推荐
所有评论(0)