ネットワークスイッチングデバイスのシリアル番号を返すスクリプト

ネットワークスイッチングデバイスのシリアル番号を返すスクリプト

私は非常に大きなネットワークを調査し、リストを作成する任務を引き受けました。特に、1000を超えるAvayaスイッチとルーターのシリアル番号を取得する必要があります。これらすべては、私のワークステーションからTelnetまたはSSHを介してアクセスできます。ほとんどすべてのサービスは、同じユーザー名とパスワードを使用してアクセスできます。一部はTelnetアクセスのみ、一部はSSHアクセスのみです。

ログイン後、次のようなシリアル番号を取得できます。

en[crlf](cli コマンドモード有効)

show tec[crlf](デバイスの技術情報を返します)

[3x spacebar](シリアル番号が表示されていることを確認するため)

q(より多くのデータ表示を停止し、cliプロンプトに戻ります)

exit[crlf](ターミナルセッション終了)

生成された出力からシリアル番号を見つけることができます。

だから私の質問は、bashスクリプトや同様のスクリプトでそれを自動化して、与えられたデバイスIPアドレスに基づいてシリアル番号のリストを生成することです。

理想的には、スクリプトは次のことを行う必要があります。

1. ファイルからデバイスの IP アドレスを読み込みます。

2. SSH 資格情報 1 を使用してログインを試みます。 (失敗した場合は、資格情報2を試してください。)

3. 失敗した場合 Telnet 資格証明 1 (失敗した場合は資格証明 2 試行)

4. すべて失敗した場合は、出力ファイルに「login failed」を記録します。

5. 成功したら、デバイスの IP アドレスとシリアル番号を出力ファイルに書き込みます。

6. リストの次のデバイス IP について繰り返します。

7. この場合、プレーンテキストのユーザー名とパスワードを使用することは問題になりません。

私のワークステーションで最新のUbuntu Linuxを使用しています。

誰かがこれを行うためのアドバイスをしてくれることを願っています。 1000個のスイッチに手動でログインしたくありません。

答え1

対話型CLIプロセスを自動化するには、「Expect」またはその代替を使用できます。https://en.wikipedia.org/wiki/Expect。最も簡単なExpectスクリプトの例:

spawn telnet foo.bar.com 
expect ogin {send luser\r}
expect assword {send TopSecret\r}
send "who am i\r" 
send "exit\r"
expect eof

関連情報