2

cisco デバイスの設定を取得するために、expect/bash スクリプトを作成しました。これは単純に cisco の実行構成をコピーし、tftp を使用して保存するだけです。

#!/bin/bash
while read line;
    do

device=$line;
expect << EOF

spawn telnet $device
expect "Username:"
   send "username\n"
   expect "Password:"
  send "password\n"
send "copy running-config tftp://192.168.244.14\r"
expect "Address or name of remote host"
send "\r"
expect "Destination filename "
send "\r"
expect "secs"
send "exit\r"
close
EOF

done < /home/marco/Scrivania/Host.txt

exit 0

私の問題は、いくつかのデバイスがあり、一部はtelnet接続を受け入れるように構成されており、他はssh接続のみを受け入れるように構成されていることです。したがって、私のスクリプトでは、次のようなものを追加します。

3 分経っても応答がない場合は、telnet を使用してデバイスに接続し、「spawn telnet...」コマンドをキャンセルして、ssh を使用して接続を試みます。

魔法のようにこれを実装できますか?

4

1 に答える 1

0

これは、実際には正しい方法ではありません。telnet 用と ssh 用の 2 つの個別のリストを作成する方がはるかに優れています。長期的には物事を単純に保つだけです。

ただし、接続をハングアップさせてタイムアウトにすることに本当に設定している場合は、確かにそれを行うことができます. タイムアウト値を秒単位で設定するだけで、タイムアウトが期間を超えた場合に実行するアクションが実行されます。

例えば:

spawn telnet $device
expect -timeout 180 {
    "Username:" {send "username\r\n"; sleep 1; send "password\r\n"}
    timeout     { your_ssh_actions_or_proc }
于 2012-06-12T17:39:08.680 に答える