こんにちは。2 つのデバイス間のネットワーク トラブルシューティングに expect を使用しようとしています。要約すると、私が実現しようとしているのは、2 つのデバイスを入力してコマンドを適用する expect を使用してスクリプトを実行することです。
- スクリプトはユーザーに2つのホスト名を入力するよう要求する
- 変数user、password、promptが設定されている
- 最初のデバイスにSSH接続するためのプロセスを生成する
- トラブルシューティングのための 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";