2014-09-29 52 views
1

我想用最新的修復包修補一大堆CENT OS機器。我有下面的bash腳本,它將csv文件作爲具有這些機器的ip地址和密碼的輸入。Bash腳本不會ssh所有的csv文件的條目

但是,它的代碼工作正常,它只適用於第一行,它似乎沒有爲列表的其餘部分工作,因爲我的output.txt只有第一行主機的條目。

patch.sh

INPUT=hosts_test.cvs 
OLDIFS=$IFS 
IFS=, 
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; } 
while read privateip password 
do 

sshpass -p$password ssh -t -o "StrictHostKeyChecking no" [email protected]$privateip " 

hostname 
hostname -I --all-ip-addresses 
sudo yum -y update bash 
env x='() { :;}; echo vulnerable' bash -c \"echo If you see the word vulnerable above, then you are vulnerable to shellshock\" 
echo "" 
exit 

" >> output.txt 

done < $INPUT 
IFS=$OLDIFS 

hosts_test.cvs

10.xxx.xx.219,abcd~qY1 
10.xxx.xx.226,l4~abcdefg 
10.xxx.xx.221,[email protected] 

端子輸出

僞終端將不被分配,因爲標準輸入不是終端。

+0

我可能看的'ssh'的'-n'和'-f'標誌。這可能是你的ssh進程正在讀取指向while循環的輸入文件的其餘部分。我不確定你需要'-t'選項。 – zerodiff 2014-09-29 16:26:28

回答

0

添加在您的sshpass命令</dev/null的末尾。

0
  1. 添加Defaults:username !requiretty/etc/sudoers配置
  2. 從你的ssh命令
  3. 可選擺脫-t,但建議:設立公共密鑰身份驗證,所以你沒有你的密碼趴在文本文件中周圍。
0

你可以通過SSH另一-t強制分配pty:

ssh -t -t