paramiko 是基於Python實現的SSH2遠程安裝鏈接,支持認證及祕鑰方式。能夠實現遠程命令執行、文件傳輸、中間SSH代理等功能。python
paramiko安裝 linux
#!/bin/bash #install indepence package cd /data/soft wget https://www.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz yum -y install gcc python-devel tar zxf pycrypto-2.6.tar.gz -C /usr/local cd /usr/local/pycrypto-2.6 python setup.py build python setup.py install wget https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.13.tar.gz#md5=1f60eda9cb5c46722856db41a3ae6670 tar zxf ecdsa-0.13.tar.gz -C /usr/local cd /usr/local/ecdsa-0.13 python setup.py build python setup.py install #install paramiko package cd /data/soft wget https://pypi.python.org/packages/source/p/paramiko/paramiko-1.16.0.tar.gz#md5=7e1203f5ffeb7d2bc2bffc4feb804216 tar zxvf paramiko-1.16.0.tar.gz -C /usr/local cd /usr/local/paramiko-1.16.0 python setup.py build python setup.py install
導入paramiko模塊:import paramikobash
[root@bogon ~]# python Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import paramiko >>>
paramiko API安裝:pip install paramiko服務器
SSHClientssh
用於鏈接遠程服務器並執行基本命令ui
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='172.16.2.100', port=22, username='root', password='123345') # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()
具體實現腳本以下:spa
#!/usr/bin/env python import paramiko transport = paramiko.Transport(('172.20.2.234',22)) transport.connect(username='root',password='000000') ssh = paramiko.SSHClient() ssh._transport = transport stdin,stdout,stderr = ssh.exec_command('uname -a') print(stdout.read()) transport.close()
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='172.16.2.234', port=22, username='root', key=private_key) # 執行命令 stdin, stdout, stderr = ssh.exec_command('df') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()
具體實現腳本以下:.net
[root@bogon paramiko]# cat para_key.py #!/usr/bin/env python import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') transport = paramiko.Transport(('172.20.2.234',22)) transport.connect(username='root',pkey=private_key) ssh = paramiko.SSHClient() ssh._transport = transport stdin,stdout,stderr = ssh.exec_command('df -hT') print(stdout.read()) transport.close()
SFTPClient代理
用於鏈接遠程服務器並執行上傳下載orm
基於用戶名密碼上傳下載:
import paramiko transport = paramiko.Transport(('172.16.2.234',22)) transport.connect(username='root',password='123345') sftp = paramiko.SFTPClient.from_transport(transport) # 將location.py 上傳至服務器 /tmp/test.py sftp.put('/data/local/location.py', '/data/remote/test.py') # 將remove_path 下載到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
具體實現代碼以下:
#!/usr/bin/env python import paramiko username = 'root' password = '000000' hostname = '172.20.2.234' port = 22 try: t = paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/data/local/localfile','/data/remote/remotefile') sftp.get('/data/remote/remotefile1','/data/local/localfile1') sftp.mkdir('/data/aaa',0755) sftp.rmdir('/data/aaa') sftp.rename('/data/remote/test.sh','/data/remote/testfile.sh') print(sftp.stat('/data/remote/testfile.sh')) print(sftp.listdir('/data/remote')) except Exception as e: print(e)