1

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

该代码工作正常,但是它只适用于第一行它似乎不适用于列表的其余部分,因为我的 output.txt 只有第一行 host 的条目。

补丁.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 不是终端。

4

3 回答 3

1

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

于 2014-09-29T17:48:00.003 回答
0
  1. 添加Defaults:username !requiretty到您的/etc/sudoers配置中
  2. 摆脱-t你的 ssh 命令
  3. 可选,但建议:设置公钥身份验证,这样您的密码就不会出现在文本文件中。
于 2014-09-29T17:40:08.667 回答
0

您可以通过 ssh 另一个-t来强制 pty 分配:

ssh -t -t
于 2014-09-29T19:38:06.713 回答