我是脚本的新手,因此需要帮助来解决此问题。
我们大约有3000台VM和450台物理服务器,它们是基于Linux的服务器(很少有ubuntu从9.x开始,其中很少是Susu从8.X开始,而大多数是RHEL从4.x到7.4)。所有这些我都需要在其各自的/ etc / hosts文件中添加一些带有IP详细信息的主机名条目。
我在每台服务器上都有不同的用户,可以使用全部sudoers访问权限。因此,我创建了一个CSV文件,其主机名,用户名和密码格式。其中包含登录所需的详细信息。文件名是“ hostname_logins.csv”
我需要将文件(即hostname_list)上传到每个服务器,然后在每个服务器主机文件中更新这些相同的详细信息。
我将使用一台RHEL 6服务器运行此脚本。(所有其他主机都可以从该服务器解析并且可以访问,我已经确认了。)
因此需要帮助来修复此脚本。
脚本不确定是什么错误,因为我是脚本的新手:
#!/bin/bash
while read hostname_login user_name user_password
do
scp -p ./hostname_list $user_name:$user_password@$hostname_login:/tmp
ssh -eS $user_name:$user_password@$hostname_login [bash -c "echo rishee | sudo -S mv /tmp/hostname_list ./hostname_list && cp -p /etc/hosts /etc/hosts.bkp && cat ./hostname_list >> /etc/hosts && rm -f ./hostname_list"]
done < hostname_logins.csv
我需要将其作为一个脚本运行在所有这些服务器上。提前致谢。
使脚本能够重复执行而不会产生副作用(幂等)始终是一个好主意...在上面,您正在备份关键文件/ etc / hosts,但是在下一次运行时要擦除相同的备份-如果/ etc / hosts损坏,即使不致命也非常危险
运行初步脚本以简单地将/ etc / hosts复制到某个工作文件中,然后针对该工作副本运行脚本,然后在对某些玩具服务器有效的情况下运行脚本,然后使用实际的/ etc / hosts发布您的脚本
您上面的命令集使用您的userid和sudo混合在一起,这将给您权限错误...建议您将以下文件scp放入每个框,然后在每个远程框上将其作为sudo执行...了解/ etc /中的语法主机并确认您的附加行符合良好的语法
#!/bin/bash
set -o errexit # exit on any error
set -o xtrace # print command prior to execution
hostname_file=/root/hostname_list
working_hosts=/etc/hosts.working
mv /tmp/hostname_list $hostname_file
cp -p /etc/hosts $working_hosts
cat $hostname_file >> $working_hosts
rm $hostname_file
echo here is contents of file $working_hosts
cat $working_hosts
上面的脚本还没有完成,但是如果您更改上面的脚本以使用真实的/ etc / hosts文件,它将在玩具服务器上花费90%的时间,请确保您重新启动了该玩具服务器并签出了OK
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句