最近では、Jump Hostを有効にしてすべてのデバイスと対話できました。 6.x は赤で、root アクセス権がありません。 Autoexpectとbashでのみスクリプトを書くことができ、モジュールは不可能です。
ソース:5000個のデバイスがあります(1行あたり1つ、パラメータごとに3つ - 場所ホスト名IP -タブで区切られています)。
処置:各場所(ARGV1)からすべてのデバイスを検索し(5000と仮定し、40は場所を示します)、出力を一時ファイルにリダイレクトし(出力なし、エコーオフ)、一時ディレクトリ内の各デバイスに対してコマンドを実行します。出力はIPではなくHostName ARGV2でなければなりません。
tmpで各デバイスをpingし、各ホストに対して成功を返すか、各デバイスにログインし、コマンドを実行し、ホストの結果を印刷し、tmpファイルの次のエントリに移動すると言います。
入力ファイル構造の例:
AA Torp1 1.1.1.1
AA Torp2 2.2.2.2
BB Torp97 9.9.9.9
AAの位置で各デバイスにpingを実行するとします。cat hosts.txt | grep AA
たとえば、tmpスクリプトを作成してから各IPをpingする方法の出力は次のとおりです1.1.1.1
。2.2.2.2
pingが成功したらTorp1 OK pingが失敗するとTorp2 NOK
デフォルトの例...または位置ベースの各IPに対してssh grepコマンド出力を実行し、tmpファイルを削除します。
答え1
これを行う簡単な方法はwhile read
ループを使用することです。一般的な形式は次のとおりです。
while read var1 var2 ... varN; do something; done < inputFile
デフォルトでは、各入力行は空白に分割されているため、デフォルトでは次のものがすでに必要です。
while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done < ips.txt
または特定の場所に制限します。
grep location ips.txt | while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done
このファイルでテストした場合:
location1 example.com 93.184.216.34
location2 google.com 8.8.8.8
location1 bad.com 123.456.7.8
私達は次を得ました:
$ grep -w "^$location" ips.txt |
while read location hostname ip; do
printf "Ping of $hostname ($ip): ";
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED";
done
Ping of example.com (93.184.216.34): OK
Ping of bad.com (123.456.7.8): FAILED