【发布时间】:2018-03-30 03:36:30
【问题描述】:
我们有大约 3000 台虚拟机和 450 台物理服务器,它们是基于 Linux 的服务器(从 9.x 开始,很少有 ubuntu,从 8.X 开始很少有 Susu,从 4.x 到大多数是 RHEL 7.4) 在所有这些上,我需要将一些带有 IP 详细信息的主机名条目添加到它们各自的 /etc/hosts 文件中。
我在每台服务器上都有不同的用户,我可以使用完全 sudoers 访问权限 因此,我创建了一个包含主机名、用户名和密码格式的 CSV 文件。其中包含登录所需的详细信息。文件名为“hostname_logins.csv”
我需要将文件(即主机名列表)上传到每个服务器,然后更新每个服务器主机文件中的相同详细信息。
我将使用一台 RHEL 6 服务器运行此脚本。 (所有其他主机都可以从此服务器解析并且可以访问,我已经确认了。)
脚本正在运行,但它要求接受主机密钥一次,还要求输入密码 2 次,但第三次它没有要求输入密码,我猜它自动工作,但需要确保它不要求接受主机密钥或密码。:
#!/bin/bash
runing_ssh()
{
while read hostname_login user_name user_password
do ssh -vveS -ttq rishee:rishee@192.168.1.105 "sudo -S -ttq < ./.pwtmp cp -p /etc/hosts /etc/hosts.$(date +%Y-%m-%d_%H:%M:%S).bkp && sudo -S bash -c 'cat ./hostname_list >> /etc/hosts' && rm -f ./.pwtmp ./hostname_list"
done < hostname_logins.csv
}
while read hostname_login user_name user_password
do echo $user_password > ./.pwtmp
cat ./.pwtmp
scp -p ./.pwtmp ./hostname_list $user_name@$hostname_login:
runing_ssh
done < hostname_logins.csv
我需要把它作为一个单一的脚本,它可以在所有这些服务器上运行。提前致谢。
【问题讨论】:
-
在 while 循环之前执行 IFS=,因此您在读取命令期间正确拆分数据
-
我真的推荐 ansible....