複数のネットワークデバイスに自動的に接続し、コマンドを実行し、出力をファイルに保存する方法は?

複数のネットワークデバイスに自動的に接続し、コマンドを実行し、出力をファイルに保存する方法は?

約1000台のネットワークデバイスでコマンドを実行し、出力をファイルに保存する必要があります。ファイルには、SSHを使用して接続する必要があるすべてのネットワークデバイス名がリストされています。たとえば、コマンドを実行して出力をshow interface descriptionファイルに保存する必要があります。これらのデバイスは、すべてのデバイスで同じ共通ユーザー名とパスワードに設定されます。したがって、デフォルトでは、リストファイル内のすべてのデバイスでこれらのコマンドを実行するにはスクリプトが必要です。

ssh user@device1
password: passwordhere
user@device1> show interface description
user@device1> exit

次に、すべての出力をファイルに保存します。私はRed Hat Enterprise Serverを使用しています。

答え1

自動化する最も重要なのは、sshパスワードを入力することです。パスワードなしで設定sshまたはインストールする2つの方法を試すことができますsshpass

  • パスワードを入力するために使用されますsshpass。お持ちの場合DAGリポジトリ設定が完了したら、yumを使用してインストールできます。

    yum install sshpass
    

    そうでない場合でもできます。RPMを直接ダウンロードまたは、リポジトリーを追加したら、以下をインストールします。

    1. rpmforge-release パッケージをダウンロードします。以下の2つのリンクのいずれかを選択し、ホスティングアーキテクチャに一致するリンクを選択してください。使用するものがわからない場合は、次のようにスキーマを確認できます。uname -i

    2. DAG用GPGキーのインストール

      rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
      
    3. ダウンロードしたパッケージのインストール

      rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
      
    4. インストールするsshpass

      yum install sshpass
      

    一度インストールすると、各行にデバイスの名前またはIPを含むsshpassファイルが与えられたら、次のようにプロセスを自動化できます。ips.txt

    while read ip; do 
      echo -n "$ip: " >> local_file.log;
      sshpass -p 'your password' ssh user@$ip remote_command >> local_file.log
    done < ips.txt
    
  • sshまたは、各デバイスにパスワードを設定せずにインストールをスキップすることもできますsshpass

    1. パスワードなしで設定ssh

      ssh-keygen -t rsa
      while read ip; do 
        ssh-copy-id -i ~/.ssh/id_rsa.pub user@$ip; 
      done < ips.txt
      
    2. あなたの仕事を実行

      while read ip; do 
        echo -n "$ip: " >> local_file.log;
        ssh user@$ip remote_command >>local_file.log
      done < ips.txt
      

答え2

数年前、私はリモート接続の自動化に関して同様の問題に直面しました。使った予想される非常に柔軟なツールですが、時々使用するのは少し面倒です。ユーザーがコマンドラインに入力して実行できるすべての操作を実行しますが、システムの可能なすべての反応はスクリプトで識別できる必要がありますexpect(したがって、ツール名:驚きが好きではありません)。
しかし、これはあなたの問題に大きなハンマーになる可能性があり、@erdonが提案した解決策はより軽く、より適切である可能性があります。

答え3

これにはPythonとParamikoスクリプトを使用できます。接続して申し訳ありませんが、ここにスクリプトを投稿しました。」http://certifiedgeek.weebly.com/blog/network-scripting-via-ssh-with-python-and-paramiko「スクリプトがある場所」https://github.com/cwgueco/netscript

"netscript.py"スクリプトには次のオプションがあります。

netscript.py -t <target> -u <username> -p <password> -i <command_file> -v
- the target is the IP address/hostname
- username/password should have allowed privilege to run commands
- command_file is a text file where the commands are listed
- v for verbose wherein you can pipe this to a file

各デバイスに接続して同じコマンドセットを実行し、各出力をファイルにパイプするときにこのPythonスクリプトを繰り返すスクリプトを作成するだけです。

関連情報