2016-07-22 3 views
0

私は約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などには保存されません。

どのようにして各ホストに新しいファイルを作成することができますか反対に走る?

答えて

1

私は、これはあなたが

#!/bin/bash 

hosts=$(< iplist) 

for h in $hosts; do /root/expect_script "$h" > "${h}.txt" 
done 
+0

または「$ {に時間 '、配列' hosts'、(例えば、 'ホスト=($(

+0

は完全に動作します。 – user53029

関連する問題