23 августа 2012 г.

Bash - Заходим на сервер и выполняет команду

Сканирует есть 10.13.177.0/24 и по доступным ip коннектится и выполняет команду. При этом смотрит что-бы ОС не была Linux. Так же есть лист на которые ip не нужно заходить.

#!/usr/local/bin/bash
noDeployHosts=( 10.13.177.17 10.13.177.50 )

_execCmd()
{
    host=$1
    ssh root@$host '[ "`uname`" == "Linux" ] || exit 1' || scp dist/file root@$host:/usr/libexec/
    ssh root@$host '[ "`uname`" == "Linux" ] || exit 1' || scp dist/file.cfg root@$host:/usr/
}

while read host
do
hosts=( "${hosts[@]}" $host )
done < <(fping -a -g 10.13.177.0/24 )

for host in "${hosts[@]}"; do

    processHost=1
    for item in "${noDeployHosts[@]}"; do
        if [ "$item" == "$host" ]; then
            processHost=0
            break;
        fi
    done

    if [ "$processHost" -eq "1" ]; then
        _execCmd $host
        #count=$(( count + mailc ))
        #echo $count
    fi