1

問題が発生しています。ラボの時間が終わった後に、cisco ターミナル サーバーにログインして vty 回線をクリアするために、PHP スクリプトで呼び出す単純な期待スクリプトがあります。論理は単純で、ユーザーが存在する場合、回線 vty 0 のみを占有します。

問題は、ユーザーが存在しない場合に発生します... ciscoルーターは、%connection to clearまたは何かを示すエラーを表示し、10個のルーターのラボを管理し、構成をロードしているため、必要のない残りのスクリプトを実行することを期待しています時間がかかるファイル。

ログからエラーを読み取り、そのメッセージが表示された場合にスクリプトを終了する方法を教えてください。


#! /usr/bin/expect -f

spawn telnet 192.168.2.1
set user [lindex $argv 0]
set pass [lindex $argv 1]
expect "Username:"
send "$user\r"
expect "Password:"
send "$pass\r"
expect "*>"
send "enable\r"
expect "*#"
send "clear line vty 0\r"
send "\r"
expect "*#"
send "copy tftp://192.168.2.3 running-config\r"
send "config\r"
send "\r"
expect "*#\r\n"
4

1 に答える 1

3

あなたが求めているエラー処理コードはここにあります...

send "clear line vty 0\r"
expect {
    "confirm]" { send "\r" }
    "% Not allowed" { send "quit\r"; exit }
}
expect "#"

これは or のどちら[confirm]% Not allowed to clear current lineを探して、適切な実行/停止の決定を行います。

ラボのマシンに対して実行できるように、スクリプトにいくつかの変更を加えました。ルーターが有効なパスワードを要求するのを無効にした方法はわかりませんが、スクリプトに追加する必要があるかもしれません。

スクリプトをより堅牢にしたい場合は、show user行をクリアする前に a を発行し、スクリプトがオンになっていない行のみをクリアすることができます。これは、実験用の演習として残しておきます。


#!/usr/bin/expect -f

spawn telnet 172.16.1.5
set user [lindex $argv 0]
set pass [lindex $argv 1]

expect "Username: "
send "$user\r"
expect "assword: "
send "$pass\r"
expect ">"
send "enable\r"
expect "assword: "
send "$pass\r"
expect "#"
send "clear line vty 0\r"
expect {
    "confirm]" { send "\r" }
    "% Not allowed" { send "quit\r"; exit }
}
expect "#"
send "copy tftp://192.168.2.3 running-config\r"
expect "Source filename *]? "
send "config\r"
expect "Destination filename *]? "
send "running\r"
expect "#"
exit
于 2012-05-09T00:57:38.440 に答える