web-dev-qa-db-ja.com

スクリプトがtelnetログインを自動化することを期待する

Telnet経由でデバイスに自動的にログインするexpectスクリプトを作成しようとしています

Expectコマンドに複数の可能性がない場合、スクリプトは正常に機能し、デバイスにログインします。

#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

spawn telnet $ip $port
expect "'^]'." sleep .1;
send "\r";
sleep .1;
expect   "login:"
send "$user\r"
expect "Password:"
send "$password\r";
interact

上記のスクリプトは正常に機能し、正しいパラメーターを渡すと正常にログインします。しかし、expectコマンドに(エラー処理のために)ブランチを追加すると、スクリプトはlogin:プロンプトでスタックします。しばらくすると、出力されます スクリプトエラー 何か助けはありますか?以下の誤ったスクリプト。

#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

spawn telnet $ip $port
expect "'^]'."
sleep .1;
send "\r";
expect
{
  "login:"
  {
        send "$user\r"
        expect "Password:"
        send "$password\r";
        interact

  }

  "Host: Connection refused"
  {
    send_user "ERROR:EXITING!"
    exit
  }

}

PS:このスクリプトは、デバイスにさまざまなビルドイメージをロードするための追加のプロンプトを待つためにさらに開発されます。 telnet(コンソール)接続のみが機能します。したがって、sshはオプションではありません。

8
woodstok

私の悪い。問題は中括弧にありました。それらはexpectコマンドと同じ行にあるはずです。

5
woodstok