批量ssh免密认证和改名


 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值