Pythonは複数のサーバ間でファイルのアップロード/ダウンロード機能を実現
28908 ワード
まず、この機能を実現するにはparamikoモジュールを借りる必要があるので、このブログではparamikoモジュールを使用して関連するサーバ間のファイル操作を行う方法について重点的に説明します.
一:紹介
paramikoはpython言語で書かれたモジュールで、SSH 2プロトコルに従い、暗号化と認証でリモートサーバへの接続をサポートしています.
pythonのようなプラットフォーム間で動作可能な言語を使用しているため、Linux、Solaris、BSD、MacOS X、Windowsなど、すべてのpythonがサポートするプラットフォームでparamikoがサポートできるため、SSHを使用して一つのプラットフォームから別のプラットフォームに接続し、一連の操作を行う必要がある場合、paramikoは最適なツールの一つです.
一般的な例を挙げると、Windowsクライアントを使用してLinuxサーバにリモートで接続し、上記のログステータスを表示する必要があります.一般的に使用されている方法は、次のとおりです.用telnet 用PUTTY 用WinSCP Xmanager等で… では、今また1つ追加して、サーバーからファイルをダウンロードする必要がある場合は、どうすればいいですか?よく使われる方法は、LinuxにFTPをインストールして配置 LinuxにSambeをインストールして配置する... 一般的な解決策としては、リモートサーバに必要な構成が必要であることがわかります.リモートサーバが1、2台しかない場合は、N台があれば、1台ずつ構成する必要がある場合や、コードを使用して以上の操作を行う必要がある場合は、上記の方法は不便です.
paramikoを使用すると、上記の問題をうまく解決できます.前述の方法よりも、対応するソフトウェア(pythonおよびPyCrypto)をローカルにインストールするだけで、リモートサーバに構成要件がなく、複数のサーバを接続するために複雑な接続操作を行うのに特に役立ちます.
二:取り付け
paramikoのインストールには、pythonとPyCryptoという別のモジュールの2つの前提条件があります.通常、標準のpythonモジュールをインストールします.モジュールのルートディレクトリで実行するだけです.
2.1、PyCryptoインストール
テスト:
2.2、paramiko取付
テスト:
(Crypto error: ‘module’ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC’
/usr/lib/python 2を見つけます.7/site-packages/Crypto/Util/number.py
三:paramikoの使用
#ssh接続のリモートホストアドレスとポートt=paramikoを設定.Transport((ip,port)#ログイン名とパスワードt.connect(username=username,password=password)#接続に成功したらchannel chan=t.open_を開くセッションのタイムアウト時間を設定します.settimeout(session_timeout)#リモートterminal chanを開く.get_pty()#terminal chanをアクティブにします.invoke_shell()はchanを通過することができます.send(‘command’)とchan.recv(recv_buffer)は、コマンドをリモートで実行し、フィードバックをローカルで取得します.paramikoには2つのモジュールSSHClient()とSFTPClient()がSSHClient()を利用しています.
SSHClient()にはtransport変数があります.これは接続を取得するために使用されます.そのため、transport変数を単独で取得し、接続操作を実行することもできます.
transportでアップロードダウンロードおよびコマンドの実行を実現する:
四、linuxとの接続
次にparamikoを使用してlinuxサーバに接続する2つのコードを示します.
方法1:
方式2:
SFTPClient()もtransportを使用して実現されるので、コマンドとアップロードファイルを混在させる必要がある場合はtransportを使用して実現する必要があります.リモートホストへの接続に鍵が必要な場合は、上の2行目のコードを次のように変更できます.
3.1 Windowsはlinuxに対して任意のコマンドを実行し、結果を出力する
linuxサーバに22ポートがオープンしている場合、windows側ではparamikoを使用してサーバにリモート接続し、任意のコマンドを実行してprintまたは他の方法で結果を得ることができます.
コードは次のとおりです.
その中の「あなたのコマンド」はlinuxがサポートするコマンドを任意に使用できます.
3.2 widnows側からlinuxサーバ上のファイルをダウンロードする
3.3 widnows側からlinuxサーバにファイルをアップロードする
3.4 Linuxにparamikoモジュールをインストールする
scrapyというアプリケーションで発生した問題c/_をインストールします.cffi_backend.c:2:20: fatal error: Python.h: No such file or directory sudo apt-get install python-dev c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory 1 sudo apt-get install libffi-dev *make sure the development packages of libxml2 and libxslt are installed * 1 sudo apt-get install libxslt1-dev
1.インストールwgetをダウンロードするhttp://peak.telecommunity.com/dist/ez_setup.py
2.python ez_setup.py
3.easy_install paramiko
一:紹介
paramikoはpython言語で書かれたモジュールで、SSH 2プロトコルに従い、暗号化と認証でリモートサーバへの接続をサポートしています.
pythonのようなプラットフォーム間で動作可能な言語を使用しているため、Linux、Solaris、BSD、MacOS X、Windowsなど、すべてのpythonがサポートするプラットフォームでparamikoがサポートできるため、SSHを使用して一つのプラットフォームから別のプラットフォームに接続し、一連の操作を行う必要がある場合、paramikoは最適なツールの一つです.
一般的な例を挙げると、Windowsクライアントを使用してLinuxサーバにリモートで接続し、上記のログステータスを表示する必要があります.一般的に使用されている方法は、次のとおりです.
paramikoを使用すると、上記の問題をうまく解決できます.前述の方法よりも、対応するソフトウェア(pythonおよびPyCrypto)をローカルにインストールするだけで、リモートサーバに構成要件がなく、複数のサーバを接続するために複雑な接続操作を行うのに特に役立ちます.
二:取り付け
paramikoのインストールには、pythonとPyCryptoという別のモジュールの2つの前提条件があります.通常、標準のpythonモジュールをインストールします.モジュールのルートディレクトリで実行するだけです.
python setup.py build
python setup.py install
: gcc(yum -y install gcc)
2.1、PyCryptoインストール
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz
tar -zxvf pycrypto-2.6.tar.gz
cd pycrypto-2.6/
python setup.py build && python setup.py install
テスト:
python>> import Crypto
( :error: command 'gcc' failed with exit status 1; python-dev , yum -y install python-devel)
2.2、paramiko取付
wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz
tar xvzf paramiko-1.7.7.1.tar.gz
cd paramiko-1.7.7.1/
python setup.py build && python setup.py install
Crypto error: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
テスト:
python>> import paramiko
(Crypto error: ‘module’ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC’
/usr/lib/python 2を見つけます.7/site-packages/Crypto/Util/number.py
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
コメント#if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:)*
三:paramikoの使用
#ssh接続のリモートホストアドレスとポートt=paramikoを設定.Transport((ip,port)#ログイン名とパスワードt.connect(username=username,password=password)#接続に成功したらchannel chan=t.open_を開くセッションのタイムアウト時間を設定します.settimeout(session_timeout)#リモートterminal chanを開く.get_pty()#terminal chanをアクティブにします.invoke_shell()はchanを通過することができます.send(‘command’)とchan.recv(recv_buffer)は、コマンドをリモートで実行し、フィードバックをローカルで取得します.paramikoには2つのモジュールSSHClient()とSFTPClient()がSSHClient()を利用しています.
#coding:utf-8
import paramiko
# SSH
ssh = paramiko.SSHClient()
# know_hosts
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#
ssh.connect(hostname='192.168.2.103', port=22, username='root', password='123456')
#
stdin, stdout, stderr = ssh.exec_command('ls')
#
result = stdout.read()
print (str(result,encoding='utf-8'))
#
ssh.close()
SSHClient()にはtransport変数があります.これは接続を取得するために使用されます.そのため、transport変数を単独で取得し、接続操作を実行することもできます.
#coding:utf-8
import paramiko
transport = paramiko.Transport(('192.168.2.103', 22))
transport.connect(username='root', password='123456')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
print (str(stdout.read(),encoding='utf-8'))
transport.close()
transportでアップロードダウンロードおよびコマンドの実行を実現する:
1 #coding:utf-8
2 import paramiko
3 import uuid
4
5 class SSHConnection(object):
6
7 def __init__(self, host='192.168.2.103', port=22, username='root',pwd='123456'):
8 self.host = host
9 self.port = port
10 self.username = username
11 self.pwd = pwd
12 self.__k = None
13
14 def connect(self):
15 transport = paramiko.Transport((self.host,self.port))
16 transport.connect(username=self.username,password=self.pwd)
17 self.__transport = transport
18
19 def close(self):
20 self.__transport.close()
21
22 def upload(self,local_path,target_path):
23 # ,
24 # file_name = self.create_file()
25 sftp = paramiko.SFTPClient.from_transport(self.__transport)
26 # location.py /tmp/test.py
27 sftp.put(local_path, target_path)
28
29 def download(self,remote_path,local_path):
30 sftp = paramiko.SFTPClient.from_transport(self.__transport)
31 sftp.get(remote_path,local_path)
32
33 def cmd(self, command):
34 ssh = paramiko.SSHClient()
35 ssh._transport = self.__transport
36 #
37 stdin, stdout, stderr = ssh.exec_command(command)
38 #
39 result = stdout.read()
40 print (str(result,encoding='utf-8'))
41 return result
42
43 ssh = SSHConnection()
44 ssh.connect()
45 ssh.cmd("ls")
46 ssh.upload('s1.py','/tmp/ks77.py')
47 ssh.download('/tmp/test.py','kkkk',)
48 ssh.cmd("df")
49 ssh.close()
四、linuxとの接続
次にparamikoを使用してlinuxサーバに接続する2つのコードを示します.
方法1:
1 ssh = paramiko.SSHClient()
2 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
3 ssh.connect(" IP ",22," ", " ")
方式2:
1 t = paramiko.Transport((“ ”,” ”))
2 t.connect(username = “ ”, password = “ ”)
SFTPClient()もtransportを使用して実現されるので、コマンドとアップロードファイルを混在させる必要がある場合はtransportを使用して実現する必要があります.リモートホストへの接続に鍵が必要な場合は、上の2行目のコードを次のように変更できます.
t.connect(username = “ ”, password = “ ”, hostkey=” ”)
3.1 Windowsはlinuxに対して任意のコマンドを実行し、結果を出力する
linuxサーバに22ポートがオープンしている場合、windows側ではparamikoを使用してサーバにリモート接続し、任意のコマンドを実行してprintまたは他の方法で結果を得ることができます.
コードは次のとおりです.
1 #coding:Utf8
2
3 import paramiko
4
5 ssh = paramiko.SSHClient()
6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
7 ssh.connect(" IP ",22," ", " ")
8 stdin, stdout, stderr = ssh.exec_command(" ")
9 print stdout.readlines()
10 ssh.close()
その中の「あなたのコマンド」はlinuxがサポートするコマンドを任意に使用できます.
3.2 widnows側からlinuxサーバ上のファイルをダウンロードする
1 coding:utf8
2
3 import paramiko
4
5 t = paramiko.Transport((“ ”,” ”))
6 t.connect(username = “ ”, password = “ ”)
7 sftp = paramiko.SFTPClient.from_transport(t)
8 remotepath=’/var/log/system.log’
9 localpath=’/tmp/system.log’
10 sftp.get(remotepath, localpath)
11 t.close()
3.3 widnows側からlinuxサーバにファイルをアップロードする
1 import paramiko
2
3 t = paramiko.Transport((“ ”,” ”))
4 t.connect(username = “ ”, password = “ ”)
5 sftp = paramiko.SFTPClient.from_transport(t)
6 remotepath=’/var/log/system.log’
7 localpath=’/tmp/system.log’
8 sftp.put(localpath,remotepath)
9 t.close()
3.4 Linuxにparamikoモジュールをインストールする
scrapyというアプリケーションで発生した問題c/_をインストールします.cffi_backend.c:2:20: fatal error: Python.h: No such file or directory sudo apt-get install python-dev c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory 1 sudo apt-get install libffi-dev *make sure the development packages of libxml2 and libxslt are installed * 1 sudo apt-get install libxslt1-dev
1.インストールwgetをダウンロードするhttp://peak.telecommunity.com/dist/ez_setup.py
2.python ez_setup.py
3.easy_install paramiko