私は約500のリモートシステムにsshを実行し、実行コンフィギュレーションを取得する必要があります。私はパスワードの認証のみを使用することができます。私はログインしてコマンドを実行するexpectスクリプトを作成しました。スクリプトは、IPアドレスを引数としてスクリプトに渡すことができるように設定されています。私は、リモートホストから実行コンフィギュレーションスクリプトを呼び出して、私のローカルシステム上のファイルにそれをリダイレクトしているコピー複数のIPにsshを接続して設定をフェッチする
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0]
spawn ssh [email protected]$ipaddress
expect "[email protected]$ipaddress's password:"
send "passowrd\r"
set prompt {\$ $}
expect -re $prompt
send "show running-config\r"
expect -re $prompt
send "quit\r"
interact
方法:スクリプトは次のようになります期待してマイ。
./expect_script $IPADDRESS > file
これは素晴らしいですが、このスクリプトにIPのリストを入力し、完了するまで実行を続けるプロセスを自動化する必要があります。私はforループの設定に関するガイダンスを探しています。これまでのところ、私はこれは私がIPのリストを介して実行できるようにするだろうと考えています:
#!/bin/bash
hosts=$(cat iplist)
for hosts in "$hosts"; do /root/expect_script "$hosts"
done
問題は、私はループにも引っ張られています各ホストの設定のための新しい出力ファイルを作成してもらう方法がわからないです。私が行っていることは、セットアップは、ホストファイルはこのように見ている:
192.168.100.5 > file1
192.168.101.6 > file2
私は、ファイルにリダイレクトを置けば、それは働くだろうと思いました。しかし、それはしません。ループは、ssh経由でシステムに接続してコマンドを実行する限り動作しますが、file1、file2などには保存されません。
どのようにして各ホストに新しいファイルを作成することができますか反対に走る?
または「$ {に時間 '、配列' hosts'、(例えば、 'ホスト=($(
は完全に動作します。 – user53029