注意事项:
1. 适用于linux7.5及以上系统,因为需要 hostnamectl命令;
2. 操作机器必须安装 expect命令,中途会有认证都可以自动通过(故不推荐do while循环取数)。如未安装,在运行脚本机子上yum -y install expect即可;
3. 脚本里expect 后需跟空格;
4. 操作机器必须已配置ssh密钥同步-免密登陆(本次在SIT-Jenkins机器上root操作)。
操作:
PS: 本次在SIT-Jenkins机器上操作:
1. 上传ChangeHostname目录到tmp
并修改 ChangeHostname/1_IP_hostname.txt 里的IP-hostname!
IP hostname
2. 把写的脚本通过 ansible 传到所有需修改的机器上:
vim etc/ansible/hosts
最后一行下面添加:
[2023ChangeHostname] ----保证唯一性
新机器IP
例:192.121.64.240
。。。。。。
执行命令:
cd tmp/ChangeHostname
ansible 2023ChangeHostname -m copy -a "src=/tmp/ChangeHostname dest=/tmp/"
PS:
2023ChangeHostname 是唯一的,系统自动、优先、从上到下 ,去读etcansiblehosts文件
3. 批量操作-准备:
cd opt/test (任意位置)
vim zk_20230128_ChangeHostname
编辑、添加:
[root]
新机器IP
并给脚本赋权:
ansible -i zk_20230128_ChangeHostname root -m shell -a "chmod +x /tmp/ChangeHostname/* " -u root -k
3. 批量操作-执行:
ansible -i zk_20230128_ChangeHostname root -m shell -a "sh /tmp/ChangeHostname/2_change.txt " -u root -k
4. 验证结果:
ansible -i zk_20230128_ChangeHostname root -m shell -a "hostname " -u root -k
脚本内容:
1_IP_hostname.txt 脚本内容:
IP HOSTNAME
2_change.txt 脚本内容:
#!/bin/bash
pass_words="root密码"
while read m n
do
expect << EOF
spawn ssh $m "hostnamectl --static set-hostname $n"
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$pass_words\n" }
}
expect eof
EOF
done < /tmp/ChangeHostname/1_IP_hostname.txt
参考:
httpswuyaogexing.com6583549.html