アクティブなネットワーク機器での美しい自動ログイン

こんにちは、ハブラリュウディ!

ネットワーク管理者の生活を簡素化する私の方法を共有したいと思います。 すべての機器のログインとパスワードを一度に自動的に入力する方法を提案します。 アイデアの斬新さと新鮮さを装うわけではありませんが、私自身の決定ははるかに単純で、透明性が高く、ある程度主題に近いものです。 猫へようこそ。



なに


さまざまなメーカー(Cisco、D'link、Huaweiなど)の何百ものデバイスに管理対象機器のプロバイダーネットワークがあります。 各デバイスには正規名がありますが、DNSエントリはありません。 アドレスに一致する名前のリストがあります。 すべての(より正確には、ほぼすべての)デバイスは、 TACACS +を介して認証を提供します。 つまり、最悪の場合、ハードウェア構成を修正するには、上記のリストで名前でIPデバイスを見つけ、シャットダウンし、ユーザー名とパスワードを入力し、必要なことを行う必要があります。



何が欲しい


どういうわけか、すべてを自動化したいと思っています。最後に、このパスワードを1日に何千回も叩かないでください。 システムシェルに名前を入力するだけで、機器にアクセスする必要があります(シスコスタイル)。



問題を解決します


問題を解決するために、以下を使用します。



pyhtonの場合、 pexpectが使用されます-この言語のコンテキストで期待される実装です。



まず、 IPの鉄片を受け取り、シェルに送信するスクリプトを作成する必要があります。 スクリプトコードにはコメントが付いているので、私の意見では簡単です。繰り返しの必要はありません。

#!/usr/bin/env python # -*- coding: utf-8 -*- '''   cisco, d'link, huawei    ''' #    import pexpect from sys import argv #  ip     p=pexpect.spawn('telnet %s' % argv[1]) #  tacacs+ login='mylogin' password='mypassword' '''   -   .    ,       'D-Link'  .      . ''' i = p.expect(['.D-Link.','login:','Username:']) if i == 0: print 'D-Link detected' p.expect(['login:','UserName:']) p.sendline(login) p.expect(['Password:','PassWord']) p.sendline(password) i = p.expect(['.4#', '.3#','.Fail.']) if i == 2: '''    -    tacacs,   '.Fail.' -      . ''' print 'Wrong credentials! Trying default' p.expect(['login:','UserName:']) p.sendline('default') p.expect(['Password:','PassWord']) p.sendline('default') '''    -   . #3 -  , #4 -  ''' elif i == 1: print 'enabling admin' p.sendline("enable admin") p.expect('Password:') p.sendline('admin_pass') else: pass p.interact() elif i == 1: '''  cisco   -  enable  ,       ''' print 'Cisco detected' p.sendline(login) p.expect('Password:') p.sendline(password) p.interact() elif i == 2: '''  huawei    ,       sys ''' print 'Huawei detected' p.sendline(login) p.expect('Password:') p.sendline(password) p.expect('.') print 'enabling sys' p.sendline('sys') p.interact()
      
      







ここで、スクリプトを実行してgland ipパラメーターを渡すと、疑いなくシェルに直接入ります。 タスクに戻りましょう。 アクセスするには、正規名を入力するだけです。 このために、 bashエイリアスを使用します。

鉄片ごとに、bashrcに次の行を追加します: " alias _="autologin ip_"



"、スクリプトをbinディレクトリに配置します(たとえば、/ usr / bin / autologin)。

シェルに鉄片の名前を入力するだけで、不必要な質問なしで鉄片にアクセスできます。



あとがきの代わりに


python言語の開発者に感謝します。多くの、些細なことではないが、タスクは非常に簡単に解決されます。 ご清聴ありがとうございました、私はあなたの批判を待っています、私はあなたの意見を知ってうれしいです。



All Articles