在创建脚本以更新/ etc/hosts文件中的主机名时会出现多个问题?
问题描述:
我们已经有大约3000台虚拟机& 450基于Linux的服务器的物理服务器(从9.x开始的几乎没有Ubuntu的服务器是Susu 8.X &其中大部分是RHEL,从4.x开始直到7.4 )在他们所有我需要添加与IP详细信息到他们各自的/ etc/hosts文件的几个主机名项。在创建脚本以更新/ etc/hosts文件中的主机名时会出现多个问题?
我已经全sudoers文件访问的每个服务器,我可以使用 因此,我创建了一个与CSV文件中的主机名,用户名密码&格式上不同的用户。其中包含所需的详细信息登录。文件名是“hostname_logins.csv”
我需要在每个服务器主机文件的上传文件(即HOSTNAME_LIST到这些服务器,然后更新这些相同的细节。
我将使用一台RHEL 6服务器运行此脚本(所有其他主机都可以从此服务器解析出&,但我已经确认了它。)
该脚本正在工作,但它要求接受主机密钥一次,并要求密码2次,但第三次它不要求密码它会自动工作我猜,但需要确保它不要求接受主机密钥或密码。:
#!/bin/bash
runing_ssh()
{
while read hostname_login user_name user_password
do ssh -vveS -ttq rishee:[email protected] "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 [email protected]$hostname_login:
runing_ssh
done < hostname_logins.csv
我需要将此作为一个脚本,将在所有这些服务器上工作。提前致谢。
答
您正在使用sudo从/ tmp执行原始副本,但没有其他操作。
while read hostname_login user_name user_password
do echo $myPW >.pwtmp
scp -p ./.pwtmp ./hostname_list $user_name:[email protected]$hostname_login:
ssh -etS $user_name:[email protected]$hostname_login "sudo -S <.pwtmp cp -p /etc/hosts /etc/hosts.bkp && sudo -S <.pwtmp cat ./hostname_list >> /etc/hosts && rm -f ./.pwtmp ./hostname_list"
done < hostname_logins.csv
我放弃了明确发送到/ tmp和CP回你的主目录,并默认位置(以$user_name
的主目录)由不传递任何冒号后给scp。修复,如果它不适合你。
我创建了一个用于改进安全性和代码重用的密码文件,并将它与主机列表一起发送。我为每个相关命令添加了一个sudo -S,从密码文件中读取。
[bash -c ...]
语法不适用于我的实现,所以我把它拿出来了。
希望有所帮助。
更新
新增-t为SSH调用。试试看。
之前的while循环做IFS =,所以你在读取命令期间正确分割数据 – MostWanted
我真的推荐ansible .... –