Bash脚本不会ssh csv文件的所有条目

时间:2014-09-29 15:53:32

标签: linux bash centos shellshock-bash-bug

我正在尝试使用最新的修订包修补一堆CENT OS计算机。我有以下bash脚本,它将csv文件作为输入,其中包含这些机器的IP地址和密码。

代码工作正常,但它只适用于第一行,它似乎不适用于列表的其余部分,因为我的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" user123@$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,l4@abcdefgh

终端输出

由于stdin不是终端,因此不会分配伪终端。

3 个答案:

答案 0 :(得分:0)

  1. Defaults:username !requiretty添加到您的/etc/sudoers配置
  2. 从ssh命令中删除-t
  3. 可选,但建议:设置公钥身份验证,这样就不会在文本文件中包含密码。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以将ssh传递给另一个-t以强制进行pty分配:

ssh -t -t