2017-10-18 146 views
3

我們已經有大約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 .... –

回答

2

您正在使用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

相關問題