python學習之路網絡編程篇(第五篇)

paramiko簡介

  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服務器

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()

paramiko基於祕鑰登錄遠程主機

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()

paramiko實現遠程文件的上傳下載

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)
相關文章
相關標籤/搜索