2017-01-20 6 views
0

こんにちは。私は、サーバーからネットワークデバイスにアップデートされたIOSを送信できるスクリプトを作成/実行しようとしています。次のコードは、 ":flash"コマンドの直前に手動IPアドレスを入力すると機能します。期待通りのbashでSCP経由でIOSをアップデートする

#!/user/bin/expect 
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin" 
set pw xxxxxxxxxxxxxxxxxxx 

spawn scp $IOSroot 1.1.1.1:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 

expect "TACACS Password:" 
send "$pw\r" 
interact 

このコードは素晴らしいと期待されています。この問題は、 "ioshost"というファイルをIPのリストとともに使用し、このスクリプト内でそれを使用して自動化を行うときに発生します。私はこれを働かせるために様々なことを試みました。次のようにそれらのいくつかは、次のとおりです。

設定変数のコマンドを実行します/読み込みを使用しようとしているとともに

IPHosts=$(cat ioshost) 

set IPHost 'cat ioshost' 

を...

while read line; do 
spawn scp $IOSroot $line:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 
done < ioshost 

これらのどれも動作するようには思えませんし、私が探していますガイダンスのために。パスワードの設定はベストプラクティスではなく、他の記事に記載されているようにRSAキーを設定することは許可されていないので、私はこのようにしなければなりません。

ありがとうございます。

+1

をあなたが得るものはあなたが期待しているものですか?私は "$ IOSroot"展開と "$ line"を引用します。私は "IFS = read -r line"の間にも使用します。しかし、これらは実際のデータに応じて問題ではないかもしれません。 – Fred

+0

また、scp(IP:flash:/ ...)に使用している構文にも慣れていません。私はuser @ host:/ pathに慣れています。私はそれを理解するのを助けてくれますか? – Fred

+0

私が実行しているSCPの部分は、IOSがJUMPサーバー上でロードされている場所を識別するシンタックスです。次に、2番目の部分がターゲットデバイスであり、送信先のパスです。 – kuroikenshi

答えて

1

1つのExpectスクリプトと1つのBashスクリプトを使用できます。

まず、スクリプトを少し期待更新:

#!/user/bin/expect 
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin" 
set pw xxxxxxxxxxxxxxxxxxx 

spawn scp $IOSroot [lindex $argv 0]:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 
#     ^^^^^^^^^^^^^^^^ 

expect "TACACS Password:" 
send "$pw\r" 
interact 

次に、単純なバッシュforループ書き込み:あなたがどうかを確認するために突起部、ループ内であなたのscpコマンドを「エコー」しようとしたことがあり

for host in $(<ioshost); do 
    expect /your/script.exp $host 
done 
+0

これはうまくいった!私はlindex部分がどのように機能するのか尋ねます!再度、感謝します! – kuroikenshi

関連する問題