1

シリアル接続 (RS232} 経由で Cisco アクセス ポイントにログインし、IP アドレス (非常に基本的) を与える TCL/TK アプリを完成させようとしています。

ただし、最初のパスワードが失敗した場合、スクリプトで 2 番目のパスワードを試行したいと考えています。

これは、間違ったパスワードが 3 回入力された場合のシリアル接続での Cisco CLI の動作です (ユーザ名は不要で、パスワードの入力のみが求められます)。

Password:
Password:
Password:
% Bad secrets

繰り返しますが、「Cisco」のデフォルト パスワードが機能しない場合は、「Cisco2」のセカンダリ パスワードを試すスクリプトが必要です。

以下は、この問題に対する私の最近の失敗した試みです。

    expect "*>" {send "en\r"}

    expect {
    "Password:" {send "Cisco\r"; exp_continue}
    "Password:" {send "Cisco2\r"; exp_continue}
    }

    expect "*#" {send "config t\r"}

助けてくれてありがとう。

4

1 に答える 1

1

最も簡単な方法は、ステップスルーするパスワードのリストを用意することです。

set passwords {"Cisco" "Cisco2"}
set idx 0
expect "*>"
send "en\r"
expect {
   "Password:" {
      send "[lindex $passwords $idx]\r"
      incr idx
      exp_continue;   # Continue to wait for the "after" prompt
   }
   "*#" {send "config t\r"}
}

トリックは、タイムアウトなどに頼らないように、後に続くものも必要とすることです。 expect(まあ、タイムアウトが必要ないと仮定します。タイムアウトが必要な場合は、すぐに行ってください!) これは、がすべての match 句を同時にexpect待機するためです。バグのあるコードでは、同じ一致テキストを持つ 2 つの句があったため、常に最初の句が選択されていました (IIRC、現時点で複数の句が一致する場合、最初に考えられる分岐が選択されます)。

于 2012-07-04T22:53:35.237 に答える