背景说明:

我们在安装部署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

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐