プログラミングなしでtelnetを介してスイッチを構成するときの同じタイプの操作の自動化

エントリー



こんにちは、ハラジテリ!



以下に説明する方法は、wilanの宣言、インターフェイスへの追加、構成ファイルのtftpサーバーへのエクスポートなど、数十から数百の同じ操作を実行する必要がある場合に、スイッチ(Planet、D-Linkなど)を構成する際のルーチン作業の量を減らすのに役立ちます。 もちろん、解決策は最適で合理的とはほど遠いですが、私はそれが生命に対する権利を持っていることを望みます。

セットアップはtelnet接続を介して行われます。 悲しいかな、最新のスイッチはsshとsnmpをサポートしているにもかかわらず、多くの古いハードウェアはtelnetしか理解していません。 この方法は、プログラマではなく平均的なWindowsユーザーに適しています。 メモ帳とバッチバットファイルのみが使用されます(プログラマは、プログラマのパラリンピックゲームについてこれ以上読み進めないでください)。



主な問題は、スイッチに接続するときにtelnetが自動的にログインし、必要なコマンドを送信できるようにするプログラムを見つけることでした。 この問題を長時間にわたって検索した結果、2つのタイプの結果が得られました。15年前のデルファイのコードと、Pythonでtelnetクライアントを圧倒するという申し出です。

少し後に、悪名高いキティが見つかりました。 猫が泣いたプログラムに関するドキュメントと主要部分は、検索せずにサイトフォーラムにあります。 次の機能の存在によって賄われます:Kittyは保存されたセッションを実行できます。ここでは、認証用のログインとパスワード、自動実行のコマンドを含む行、およびスクリプトを含むファイルへのパスを登録できます。 スクリプトは承認後に実行されます。そのサイズは4096バイト未満、または約100行である必要があります。



準備する



デフォルトでは、キティの設定はレジストリに保存されますが、これはあまり便利ではありません。 次の内容でkitty.iniを作成します。

[KiTTY] savemode=dir initdelay=1.0 commanddelay=1.0 bcdelay=5 KittyPath=C:\Windows\System32\putty.exe
      
      





savemode = dirの場合、キティはセッションフォルダーにセッションを保存します。 私の場合の遅延は、標準の遅延とほとんど変わりません。また、引き締めることもできます。主なことは、チームが送信して解決する時間があることです。

putty.exekitty.exeおよびkitty.iniをSystem32にコピーして実行します。

 kitty.exe -convert-dir
      
      





その後、設定はkitty.iniから取得され始め、セッションはC:\ Windows \ System32 \ Sessionsに保存されます。

kitty.exeまたはkitty.exe -launcherを実行します



セッションを作成する



セッションを作成する前に、 デフォルト設定セッションで自分に最適な設定を保存することをお勧めします。特に、「 ウィンドウ-変換」セクションでUTF-8エンコードを選択することをお勧めします。

セッション自体は、多くのオプションのみを使用して、Puttyで通常どおり作成および保存されます。 [ セッション]セクションで、[telnet]を選択し、ホストまたはIPアドレスを指定します。 [ 接続-データ]セクションで認証用のログインとパスワードを指定します。 これは、特別なフィールドとコマンドラインの両方で、またはスクリプトファイルで直接実行できます。 好きなように、私はすべてのオプションを試しました。 この例では、コマンドラインを使用して認証ケースを説明します。 構文:

 \n   \p    ,      \s05   ,   10,    
      
      





それはすべて、スイッチのモデルとkitty.iniで示される遅延に依存し、経験的に選択されました。

 \s05LOGIN\n\pPASSWORD\n\p
      
      





ログインスクリプトファイルの行で、スクリプトファイルへのパスを指定します。たとえば、 C:\ scripts \ script.txt

「セッション」セクションに戻り、セッション名( testsessionなど)を登録して保存します。



スクリプトを書く



スクリプトファイルがあるフォルダーで、プレーンテキストドキュメントを作成し、たとえばscript.batとして保存します 。 お気に入りのテキストエディタで開き、書き込みます(コメントすることを忘れないでください)。

 @echo off setlocal enableextensions enabledelayedexpansion chcp 1251 echo. echo         D-Link ::--------------------------------------------------- ::    @echo null>>script.txt DEL script.txt ::--------------------------------------------------- FOR /L %%i IN (100,1,105) DO ( @echo # @echo create vlan %%i tag %%i )>>script.txt @echo #>>script.txt @echo logout>>script.txt ::--------------------------------------------------- ::  start /wait kitty.exe -load "testsession" pause
      
      





スクリプトの最初の部分では、コメントをロシア語で表示できます。 確かに、最初にコマンドラインプロパティでLucida Consoleフォントを設定する必要があります。 echoは、バッチファイルの実行時にコメントを表示します。 ::ダブルコロン-コード内のコメント(ループでは使用しないでください)。

2番目の部分では、既存のファイルまたは存在しないファイルをクリーンアップし、スクリプトを書き込みます。 魂と仕事のためのもの。

3番目の部分では、 -loadパラメーター"session_name"を指定してKittyを実行しますここで、 / waitは、バッチファイルがKittyが完了するまで待機することを決定します。

結果のテキストファイルの内容:

 # create vlan 100 tag 100 # create vlan 101 tag 101 # create vlan 102 tag 102 # create vlan 103 tag 103 # create vlan 104 tag 104 # create vlan 105 tag 105 # logout
      
      





ご想像のとおり、スクリプトを実行すると、キティ #で終わる (または他の終了、以下の例)を予期し、応答で次の行を送信します。

 ::    Planet @echo #>>testscript2.txt @echo copy running-config startup-config>>testscript2.txt @echo :>>testscript2.txt @echo Y>>testscript2.txt @echo #>>testscript2.txt @echo exit>>testscript2.txt
      
      





認可ステージをスクリプトに転送し、ログアウトの前に、たとえば、構成ファイルの保存とエクスポートを追加できます。



おわりに



したがって、非常に膨大なスクリプトを作成し、比較的迅速に実行することができます。 欠点はもちろん、部品で実装する必要があることですが、これはキティの制限です。 このような問題を解決する方法は他にもたくさんあります-完成した構成をスイッチにダウンロードすることから、特殊なソフトウェアを使用することまで。 ご清聴ありがとうございました。



PS



また、次の種類のコマンドを実行すると便利です(Excelでスクリプトやコニーですばやくスタンプできるため)。

 start kitty -telnet LOGIN@192.168.0.100 -pass PASSWORD -cmd "< - >\n\psave\n\plogout" start kitty -ssh root@192.168.0.1 -pass PASSWORD -cmd "reboot"
      
      







PPS



expectを使用したスクリプトの例:

 #!/usr/bin/expect -f set timeout -1 spawn ssh -o PubkeyAuthentication=no LOGIN@IPADDRESS expect -exact "password: " sleep 1 send -- "PASSWORD\r" expect -exact "admin#" sleep 1 send -- "COMMAND\r" expect -exact "admin#" sleep 1 send -- "logout\r" expect {\$\s*} { interact }
      
      






All Articles