免密批处理shell
大并发批处理工具,真正需要执行的脚本放在test.sh里面
执行的机器清单放在ip.txt里面
test.sh ip.txt 以及该脚本放在与清单免密相通的跳转机上执行
#!/bin/bash
parallel=60
#TYPE=$1
pid=$$
fifo_tmpfile=/tmp/$pid.fifo
HOST_LIST=/opt/bao/ip.txt
DATE=`date +%Y-%m-%d`
RESULT=result-set-$DATE.csv
LOCAL_SHELL=/opt/bao/test.sh
chmod +x $LOCAL_SHELL
REMOTE_COMMAND="sudo ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o ConnectTimeout=5 "
echo "HOST_IP,Result"
PingTest()
{
dst_ip=$1
if [ -n "`ping -w 1 -i 0.2 -c 2 ${dst_ip} 2>/dev/null|grep time=[0-9]`" ];then
return 0
else
return 1
fi
}
process()
{
host=$1
PingTest $host
if [ $? -ne 0 ];then
echo "$host,connect_failled"
else
sudo ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -o ConnectTimeout=5 $host hostname 1>/dev/null 2>/dev/null
if [ $? -eq 0 ];then
MSG=`$REMOTE_COMMAND $host "bash -s " 2>/dev/null < $LOCAL_SHELL `
echo "$host,$MSG"
else
echo "$host,No_Public_Key"
fi
fi
echo >&6
}
main()
{
mkfifo $fifo_tmpfile
exec 6<> $fifo_tmpfile
rm $fifo_tmpfile
for((i=0;i<$parallel;i++));do
echo
done >&6
cnt=0
for host in `cat $HOST_LIST`
do
cnt=$(($cnt + 1))
read -u6
process $host &
done
wait
exec 6>&-
}
main