在创建脚本以更新/ etc/hosts文件中的主机名时会出现多个问题?

在创建脚本以更新/ 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 

我需要将此作为一个脚本,将在所有这些服务器上工作。提前致谢。

+1

之前的while循环做IFS =,所以你在读取命令期间正确分割数据 – MostWanted

+1

我真的推荐ansible .... –

您正在使用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调用。试试看。

+0

我试过你的脚本,但这是我得到的错误 – Hrish

+0

[root @ node2〜 ]#./script1.sh SSH:连接到主机rishee端口22:否到主机的路由 丢失连接 rishee:[email protected]'s密码: bash下.pwtmp:没有这样的文件或目录 [根@ node2〜]# – Hrish

+0

我做了一些改动,但是并不完全正常。 – Hrish