サーバの一括管理とpythonのparamikoのモジュールの方法

7415 ワード

最近、会社のチャネルマシンのアカウントを改造管理し、会社のアカウント管理のアーキテクチャを全面的により深く理解しました.(注:基本的に全ての機器でsshは使用できないが、一部の機器のみ使用可能である.安全の観点から、共通版のsshではなく、カスタム版のsshがインストールされている(機器上のソースIPアドレスを制限すればよい).
管理サーバの自動化には、次の2つの方法があります.
1つ目の方法は当社が独自に開発したもの(サーバは3 W台程度)で、基本的にサーバ間はsshで接続できず、1台のサーバがすべてのサーバに接続できるようになっています.このサーバをチャネルマシンと呼びます(砦機とも呼ばれます)、あるサーバーに登りたいときは、まずこの通路機に登って、一連の検証を経て、自動的にあなたが登るサーバーに登ることができます.
また,各サーバの情報収集など,3 W台のサーバを管理するチャネルマシンAPIという方式を独自に開発した.このAPIの本質は,POST方式を用いて命令postをターゲットマシンに呼び出し,結果を返して処理すればよいということである.これは大まかな考えだ.
2つ目の方法は、sshのプロトコルを使用して管理し、pythonのparamikoを使用して管理することです.以下で説明します.
pythonのparamikoモジュールを使用して、sshを各サーバに送信できることを前提として、管理名の下のサーバを行うことができます.
このparamikoのモジュールについて簡単に紹介し、共有します.
  1.概要:
paramikoはpython言語で書かれたモジュールで、SSH 2プロトコルに従い、暗号化と認証でリモートサーバへの接続をサポートしています.
pythonのようなプラットフォーム間で動作可能な言語を使用しているため、Linux、Solaris、BSD、MacOS X、Windowsなど、すべてのpythonがサポートするプラットフォーム、paramikoがサポートできるため、
SSHを使用して1つのプラットフォームから別のプラットフォームに接続し、一連の操作を行う必要がある場合、paramikoは最適なツールの一つです.
一般的な例を挙げると、Windowsクライアントを使用してLinuxサーバにリモートで接続し、上記のログステータスを表示する必要があります.一般的に使用されている方法は、次のとおりです.
1:telnetで
2:PUTTYで
3:WinSCPで
4:Xmanagerなどで…
では、今また1つ追加して、サーバーからファイルをダウンロードする必要がある場合は、どうすればいいですか?よく使われる方法は、
1:LinuxにFTPをインストールして構成する
2:LinuxにSambeをインストールして構成...
一般的な解決策として、リモート・サーバに必要な構成が必要であることがわかります.リモート・サーバが1、2台しかない場合は、N台がある場合は、1台ずつ構成する必要があるか、コードを使用して以上の操作を行う必要があります.
この場合、上記の方法はあまり便利ではありません.
paramikoを使用すると、上記の問題をうまく解決できます.従来の方法よりも、対応するソフトウェア(pythonおよびPyCrypto)をローカルにインストールするだけで、リモートサーバに構成要件がなく、マルチデスクウェアに接続する必要があります.
プロセッサは、複雑な接続操作を行うのに特に役立ちます.
  2.使用するいくつかの簡単なケース:
次に、paramikoを使用してlinuxサーバに接続する2つのコードを示します.
方法1:
1 ssh = paramiko.SSHClient()

2 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

3 ssh.connect("IP  ",22,"   ","  ")

上の2行目のコードの役割は、接続がknowでないことを許可することです.hostsファイルのホスト.
方式2:
1 t = paramiko.Transport(("IP  ","  "))

2 t.connect(username = “   ”, password = “  ”)

3               ,          :

4 t.connect(username = “   ”, password = “  ”, hostkey=”  ”)

  3.いくつかの簡単な例:
linuxサーバに22ポートがオープンしている場合、windows側ではparamikoを使用してサーバにリモート接続し、任意のコマンドを実行してprintまたは他の方法で結果を得ることができます.
1 #!/usr/bin/python 

2 import paramiko

3  

4 ssh = paramiko.SSHClient()

5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

6 ssh.connect(" IP  ",22,"   ", "  ")

7 stdin, stdout, stderr = ssh.exec_command("    ")

8 print stdout.readlines()

9 ssh.close()

「あなたのコマンド」では、一般的なコマンドなど、linuxでサポートされているコマンドを任意に使用できます.
1 df:        

2 uptime:          

3 cat:       

4 mv/cp/mkdir/rmdir:          

5 /sbin/service/ xxxservice start/stop/restart:  、  、     

6 netstat -ntl |grep 8080:  8080        

7     nc -zv localhost :            

8 find / -name XXX:     

9 ...

これにより、linuxに対する操作はほとんどwindows側で行うことができ、この機能を導入すれば、複数のサーバを同時に管理することもできます.
4.widnows側からlinuxサーバ上のファイルをダウンロードする
 1 #!/usr/bin/python 

 2 import paramiko

 3  

 4 t = paramiko.Transport((“  ”,”  ”))

 5 t.connect(username = “   ”, password = “  ”)

 6 sftp = paramiko.SFTPClient.from_transport(t)

 7 remotepath=’/var/log/system.log’

 8 localpath=’/tmp/system.log’

 9 sftp.get(remotepath, localpath)

10 t.close()

5.widnows側からlinuxサーバにファイルをアップロードする
 1 #!/usr/bin/python 

 2 import paramiko

 3 

 4 t = paramiko.Transport((“  ”,”  ”))

 5 t.connect(username = “   ”, password = “  ”)

 6 sftp = paramiko.SFTPClient.from_transport(t)

 7 remotepath=’/var/log/system.log’

 8 localpath=’/tmp/system.log’

 9 sftp.put(localpath,remotepath)

10 t.close()