root@ubuntu:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
10.0.0.12 dev
10.0.0.13 gitlab
10.0.0.14 jenkins-master
10.0.0.15 jenkins-slave
10.0.0.16 k-and-h
10.0.0.17 harbor
10.0.0.18 web
root@ubuntu:~# cat ssh.sh
#!/bin/bash
# -----------------------------------
# 作者: dzx
# 日期: 20220408
# 联系: 别想着我会主动联系你!!!
# -----------------------------------
# 设置环境变量
USER_NAME='root'
USER_HOME="/${USER_NAME}/.ssh"
SSH_CONFIG_FILE='/etc/ssh/ssh_config'
USER_PASSWD='123456'
HOSTADDR_PRE='10.0.0'
SUB_RANG='12..18'
HOST_LIST=$(eval echo $HOSTADDR_PRE.{$SUB_RANG})
HOSTNAME_LIST='dev gitlab jenkins-master jenkins-slave k-and-h harbor web'
HOSTS_FILE='/etc/hosts'
# 准备基本环境
base_env(){
apt install expect -y
[ -d ${USER_HOME} ] && rm -rf ${USER_HOME}
ssh-keygen -t rsa -P "" -f ${USER_HOME}/id_rsa
sed -i '/ask/{s/#/ /; s/ask/no/}' ${SSH_CONFIG_FILE}
}
# expect自动化交互过程
expect_auto(){
remote_host=$1
expect -c "
spawn ssh-copy-id -i ${USER_HOME}/id_rsa.pub $1
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"$USER_PASSWD\r\"; exp_continue}
\"*Password*\" {send \"$USER_PASSWD\r\";}
} "
}
# 跨主机免认证环境
auth_auto(){
for i in ${HOST_LIST} ${HOSTNAME_LIST}
do
expect_auto ${USER_NAME}@$i
scp -rp ${HOSTS_FILE} ${USER_NAME}@$i:${HOSTS_FILE}
done
}
# 设定主机名
hostname_set(){
for i in ${HOSTNAME_LIST}
do
ssh ${USER_NAME}@$i "hostnamectl set-hostname $i"
done
}
# 主函数执行
main(){
# 基本环境准备
base_env
# 跨主机免密认证
auth_auto
# 设定主机名
hostname_set
}
# 执行主函数
main
#注意:遍历主机ip地址的列表,最好用eval提前将变量解析一下,这里最好将localhost加上去,因为当我们在进行集群初始化的时候,有限解析本地的主机名用的是127.0.0.1 或localhost
sh ssh.sh