注意:本脚本适用于无符号命令脚本,带符号的不建议使用,转义比较复杂,如需要使用,建议编辑脚本批量scp拷贝到目标设备后再使用批量ssh执行脚本。(一台设备测试后再批量执行,一定要注意!!!!)
- 本地创建list文件,格式如下
127.0.0.1 passwd
127.0.0.2 passwd
- 默认为ssh登录设备执行命令,修改shell变量即可
- 需要使用scp功能,将spawn ssh注释添加#
- 去除#spawn scp 前的#,修改源目即可。
#!/bin/sh
cp /dev/null failed.log
cp /dev/null success.log
total=$(cat list | wc -l)
shell='uname -r'
curr=0
while read ip password
do
curr=$(($curr + 1))
echo "=====================================[$total,$curr]Begin to process $ip ...."
if [ "$ip" != "" ]; then
ping -c 1 $ip > /dev/null
ret=$?
if [ $ret -eq 1 ]; then
printf "%03d: %s\r\n" $iCount "ping $ip Failed!"
echo $ip >> failed.log
else
expect -c "set timeout 20
set passwderror 0
#spawn scp $ip:/root/1.sh /root/2.sh
spawn ssh -o ConnectTimeout=3 root@$ip \"$shell\"
expect {
\"*assword:*\" {
if { \$passwderror == 1 } {
puts \"passwd is error\"
exit 2
}
set timeout 1000
set passwderror 1
send \"$password\r\"
exp_continue
}
\"*es/no)?*\" {
send \"yes\r\"
exp_continue
}
timeout {
puts \"connect is timeout\"
exit 3
}
}"
if [ $? -ne 0 ]; then
echo $ip >> failed.log
else
echo $ip >> success.log
fi
fi
fi
done < list