expect を使用して 1 つのホストに ssh し、いくつかのコマンドを適用し、デバイスを終了して別のデバイスに ssh し、他のいくつかのコマンドを適用する

expect を使用して 1 つのホストに ssh し、いくつかのコマンドを適用し、デバイスを終了して別のデバイスに ssh し、他のいくつかのコマンドを適用する

こんにちは。2 つのデバイス間のネットワーク トラブルシューティングに expect を使用しようとしています。要約すると、私が実現しようとしているのは、2 つのデバイスを入力してコマンドを適用する expect を使用してスクリプトを実行することです。

  1. スクリプトはユーザーに2つのホスト名を入力するよう要求する
  2. 変数user、password、promptが設定されている
  3. 最初のデバイスにSSH接続するためのプロセスを生成する
  4. トラブルシューティングのための show コマンド

上記はすべて正常に動作します。問題は、他のホスト名に ssh しようとしたときに発生します。基本的に、スクリプトは 10 秒後にタイムアウトし、他のデバイスに ssh できません。

このコミュニティの皆さんの素晴らしい仕事に感謝します

ここにコードがあります

#!/usr/local/bin/expect -f

exec tput clear >@ stdout
set timeout 10

puts "Enter hostname to connect"
set c [gets stdin]

puts "which is the destination hostname?"
set dhostname [gets stdin]

#setting password variable, reading it from file
set pa [open "pass.txt" r]
set pass [read $pa]
close $pa

#setting user variable
set user xxxx

#setting prompt variable
set prompt "(%|#|\\$|>|~|:) $"

spawn -noecho ssh $user@$c;

expect {
"Are you sure you want to continue connecting (yes/no)" {send {yes};
send "\r"
exp_continue}

"assword:" {
        send "$pass\r"
        expect -re $prompt

}
}
##commands to execute on the device
send "show system uptime\r";

expect "$prompt"

send "exit\r";

expect -re $prompt

send "ssh $user@$dhostname";

関連情報