SSH / Telnet経由で送信されたCISCOコマンドの送信

一般情報

  • スクリプト名:publip.sh(publi(point)sh ... publipSH)
  • 柔軟性:完全にカスタマイズ可能。
  • 制約事項:パスワードがすべてのデバイスで同じであることが必要です。そうしないと、数行のコードを追加する必要があります...
  • リスクレベル:高 入力には十分注意してください。誤った操作をするとネットワーク全体がフリーズする可能性があります。
  • Linuxに関する知識が必要です。ファイルを開く/編集して(vi file_name)、変更を保存します(Esc:wq?。ターゲットフォルダから./Scriptnameコマンドを使用してスクリプトを実行します)。

publip.shスクリプトとは何ですか?

このスクリプトを使用すると、ネットワーク管理者はSSHまたはTelnetを介して、選択した多数のリモートデバイス(ルータ、ファイアウォール、スイッチ、ワイヤレスアクセスポイントなど)にCiscoコマンドを送信できます(スクリプトは両方の種類の接続を自動的に処理します)。

  • これらのコマンドラインは、最初はcommandes.txtという小さなファイルに、1行に1コマンドずつ(バッチファイルまたは設定ファイルとして)順番に入力されます(サイズ制限はありません)。
  • ネットワーク上のさまざまなデバイスのすべてのIP(またはDNSエイリアス)を入力します(デバイスの数に制限はありません)。
  • 最後に、スクリプトを実行すると、パスワードを入力するように求められます。この場合、パスワードはすべてのデバイスで同じでなければなりません。

スクリプトはさらに進んでいます。

実際、完全に自律的であり、接続エラー、データ入力、および変更をログファイルに記録することができます。 このスクリプトは、SSHまたはTelnet経由で接続できる機器も識別してから、重大なエラーを生成する手順のアーカイブを保存します(クラッシュスクリプト、機器によるコマンドの誤解釈)。 エラーの種類は次のとおりです。

  • 1 - 接続タイムアウト
  • 2 - ログインエラー、間違ったパスワード
  • 3 - DNSエイリアスまたはIPが存在しない
  • 4 - Expectスクリプトのクラッシュ(機器のログファイルの作成)
  • 5 - リモート接続が無効
  • 6 - 正しいDNSエイリアスだが存在しないIP
  • 7 - シスコ以外の機器(HP Procurve)
  • 8 - 他社製の機器(X1000)
  • 9 - シスコ以外の機器(アルカテル)
  • 10 - 送信コマンドが機器に認識されない
  • 11 - 上にリストされていないエラー($?= 1)

あなたは同時にあなたのすべての機器を操作し、あなたのネットワーク上で貴重な情報を集めることができるでしょう!

補助ファイルの内容

commandes.txt

あなたはコマンドを入力する必要があります...ファイルは "conf t"で始まり "end"で始まるルーター設定への変更のためになければなりません。 変更は階層的に実行する必要があり、変更を保存することを忘れないでください。 小さな例:

 #commandes.txt conf t router ospf 100ネットワーク50.50.100.0 0.0.0.255 area 0 exit interface fa0 / 0 ip ospf hello-interval 5 ip ospf dead-interval 20 exit area 0認証メッセージダイジェスト終了 

メモを書く

liste.txt

関係するすべての機器のIPまたはDNSエイリアスを入力してください。

 #liste.txt 10.25.85.46 routeur-marseille switch-assemblee-generale 80.54.136.105 

断片は空のスペースを考慮に入れません。

スクリプト

スクリプトには小さい#[1]というキャプションが付けられます。これについてはスクリプトの最後で説明します。

 #!/ bin / bash#script.sh echo "パスワードのダウンロード" stty -echo#[1]パスワードの読み取りstty echo export ssh = "./ ssh.sh"#[2] export telnet = "./ telnet.sh "export erreur =" ./ rapport_erreurs.log "export temp =" ./ tmp_routeur.log "export cmdcisco =" ./ commandes.txt "export liste =" ./ liste.txt "エクスポートパスワードexport routeur export commande rm -f $ erreur#[3] rm -f $ ssh rm -f $ telnet cat $ liste | routeurを読みながら。 ["$ routeur"!= ""]の場合は -f $ ssh]#[4] echo 'expect 2>&1 <> $ ssh echo' ssh [メール保護] $ routeur '>> $ ssh echo' expect {'>> $ ssh echo' "パスワード:" {send "$ password \ r"} '>> $ ssh echo'タイムアウト{終了} '>> $ ssh echo'} '>> $ ssh echo' expect "#" '>> $ ssh cat $ cmdcisco | read commandをエコーし​​ながら "send \" $ commande \ r \ "" echo 'expect "#"'を完了>> $ ssh echo 'send "exit \ r"' >> $ ssh echo 'expect "closed"' >> $ ssh echo 'exit' >> $ ssh echo 'EOF' >> $ ssh chmod + x $ ssh#[5] fi -p $ ssh> $ temp 2>&1#[6] COD_RET = $? auth = "cat $ temp | grep -c"パスワード: ""#[7] if ["$ auth" -gt "1"]ならエコー "Problèmed'authentification sur $ routeur!" echo "$ routeur:間違ったログイン/パスワード" >> $ erreur continue fi temps = "grep" real '$ temp | echo sedの/ real /§/ '| cut-d'§ '-f2 | cut -d '' -f1 | cut -d '。' -f1 'if [$ temps -ge 10 -a! "'' grep 'closed' $ temp '"]#[8]それから "L'equipement $ routeur ne neresponds pas!";とエコーします。 echo "$ routeur:接続がタイムアウトしました" >> $ erreur ["$ COD_RET"!= "0"]#[9]ならば#Erreur de connection x en SSHなら[l!] -f $ telnet]エコー '期待2>&1 <> $ telnetエコー'スポーンtelnet $ routeur '>> $ telnetエコー'送信 "admin \ r" '>> $ telnetエコー'期待 "パスワード:" >> $ telnet echo 'send "$ password \ r"' >> $ telnet echo 'expect "#"' >> $ telnet cat $ cmdcisco | 読み取り中に "send \" $ commande \ r \ "" echo 'expect "#"'完了>> $ telnet echo 'send "exit \ r"' >> $ telnet echo 'expect "closed"' >> $ telnet echo '終了' >> $ telnet echo 'EOF' >> $ telnet chmod + x $ telnet fi $ telnet> $ temp 2>&1 fi COD_RET = $? auth = "cat $ temp | grep -c"パスワード: ""#[10]もし["$ auth" -gt "1"]ならエコー "Problèmed'authentification sur $ routeur!" echo "$ routeur:間違ったログイン/パスワード" >> $ erreur elif ["'grep'ホスト名検索失敗 '$ temp'"]そしてエコー "l'equipement $ routeur n'existe pas!" echo "$ routeur:存在しない" >> $ erreur elif ["'grep'不明なホスト '$ temp'"]それからエコー "la saisie de l'ipou du nom $ routeur estcte!" echo "$ routeur:間違った綴り" >> $ erreur elif ["grep '送信:spawn id exp4が開かない' $ temp '"]そしてecho "/!\ ERREUR dans laprocédure。Consultez le fichier log de $ routeur! !!」 echo "$ routeur:スクリプトの実行に失敗したと思います!" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep'認証に失敗しました '$ temp'"]それからエコーして "Mot de passeerronépour $ routeur!" echo "$ routeur:間違ったログイン/パスワード" >> $ erreur elif ["'grep'接続が '$ temp'"]を拒否した後、 "Connexionàdistance sur $ routeurdésactivé!"とエコーします。 "$ routeur:vty connection disabled"をエコーし​​ます。>> $ erreur elif ["'grep'ホストへのルートがありません '' $ temp '"]]そしてエコーします。 echo "$ routeur:ホストへの経路がありません" >> $ erreur elif ["'grep' ProCurve '$ temp'"]次にecho "routeur $ routeur HP以外のシスコ!" echo "$ routeur:他社製ルーター(HP ProCurve)" >> $ erreur elif ["grep 'Alcatel' $ temp '"]それからecho "routeur $ routeur他社製!" echo "$ routeur:他社製ルーター(アルカテル)" >> $ erreur elif ["'grep' X1000へようこそ '$ temp'"]]次に "routeur $ routeur X1000以外のシスコ!"とエコーします。 echo "$ routeur:シスコ以外の機器(X1000)" >> $ erreur elif ["不明なコマンド '$ temp'" -o "'grep'%無効な '$ temp'"]次にecho "/!\シスコは、この分野の専門家ではありません。 echo "$ routeur:認識されないコマンドが見つかりました" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' '$ temp'に接続しました。 $ temp '"]それから" $ routeur Telnet OK! "とエコーします。 elif ["'grep' Connexionは端末の '$ temp'を登録します" -o '' 'grep' '' $ temp 'への接続 "]そしてエコー" $ routeur SSH OK! " elif ["$ COD_RET"!= "0"]それから "Problèmede connexion a l'equipement $ routeur!"とエコーする。 echo "$ routeur:接続問題" >> $ erreur fi fi完了rm -f $ temp#[11] exit 

コメント

  • 1 :パスワード入力を隠す
  • 2 :すべてのファイルは変数(相対パス)に格納されているので、どこからでもスクリプトを実行できます。
  • 3 :スクリプトがすでに実行されている場合に生成された既存のファイルを削除します。
  • 4 :Expectスクリプトを作成する
  • 5 :Expectスクリプトの権限を設定する
  • 6 :Expectスクリプトを実行して、出力エラーと標準出力を集計し、タイムアウトに対処するための実行時間を計算します。
  • 7 :一時ファイル内の "Password"の出現回数を数えて、認証の問題を調べます。
  • 8 :実行時間を確認し、10(タイムアウト予定値)以下であることを確認してください。
  • 9 :SSH接続エラーの場合は、Telnet経由で手順を繰り返してください。
  • 10 :スクリプトによって生成されたすべてのエラーケースを確認してください。 (Cf II)。
  • 11 :一時ファイルを削除します。

前の記事 次の記事

トップのヒント