標籤:python paramiko
Python提供了一個Paramiko模組,允許我們通過SSH 對遠程系統進行操作,上傳和下載檔案。他的使用很直觀,下面直接看例子。
例1
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author Yuan Liimport paramiko# 建立SSH對象ssh = paramiko.SSHClient()# 允許串連不在know_hosts檔案中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 串連伺服器ssh.connect(hostname=‘host‘, port=22, username=‘root‘, password=‘123‘)# 執行命令stdin, stdout, stderr = ssh.exec_command(‘df -hT‘)# 擷取命令結果result = stdout.read()print(result.decode())# 關閉串連ssh.close()----------"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.pyFilesystem Type Size Used Avail Use% Mounted on/dev/mapper/centos-root xfs 28G 6.5G 22G 24% /devtmpfs devtmpfs 988M 0 988M 0% /devtmpfs tmpfs 998M 80K 998M 1% /dev/shmtmpfs tmpfs 998M 112M 887M 12% /runtmpfs tmpfs 998M 0 998M 0% /sys/fs/cgroup/dev/sda1 xfs 497M 169M 329M 34% /boottmpfs tmpfs 200M 12K 200M 1% /run/user/42tmpfs tmpfs 200M 0 200M 0% /run/user/0
如果看看ssh.connect()這個方法的源碼,我們可以看見他實際上調用的是Transport這個類的方法。因此我們可以直接使用Transport來建立一個session,然後進行串連,效果和上面是一樣的。
例2
import paramiko#建立一個transport sessiontransport = paramiko.Transport((‘sydnagios‘, 22))#串連sessiontransport.connect(username=‘root‘, password=‘Goat2015‘)ssh = paramiko.SSHClient()ssh._transport = transport#執行命令stdin, stdout, stderr = ssh.exec_command(‘df‘)print (stdout.read().decode())#建立sftp的對象sftp=paramiko.SFTPClient.from_transport(transport)#上傳sftp.put(‘c:\\temp\\aaa.txt‘,‘/tmp/aaa.txt‘)#下載sftp.get(‘/tmp/aaa.txt‘,‘c:\\temp\\bbb.txt‘)transport.close()----------"C:\Program Files\Python3\python.exe" C:/Users/yli/pycharmprojects/Exercise/Week12/paramiko_test.pyFilesystem Type Size Used Avail Use% Mounted on/dev/mapper/centos-root xfs 28G 6.5G 22G 24% /devtmpfs devtmpfs 988M 0 988M 0% /devtmpfs tmpfs 998M 80K 998M 1% /dev/shmtmpfs tmpfs 998M 112M 887M 12% /runtmpfs tmpfs 998M 0 998M 0% /sys/fs/cgroup/dev/sda1 xfs 497M 169M 329M 34% /boottmpfs tmpfs 200M 12K 200M 1% /run/user/42tmpfs tmpfs 200M 0 200M 0% /run/user/0
例3,我們可以完善一下例2,把這麼操作都封裝到自訂的類裡
import paramikoimport uuidclass SSHConnection(object): #初始化封裝欄位 def __init__(self, host=‘sydnagios‘, port=22, username=‘root‘,pwd=‘123‘): self.host = host self.port = port self.username = username self.pwd = pwd self.__k = None #串連session,執行操作,斷開session def run(self): self.connect() pass self.close() #串連 def connect(self): transport = paramiko.Transport((self.host,self.port)) transport.connect(username=self.username,password=self.pwd) self.__transport = transport #斷開 def close(self): self.__transport.close() #執行命令 def cmd(self, command): ssh = paramiko.SSHClient() ssh._transport = self.__transport # 執行命令 stdin, stdout, stderr = ssh.exec_command(command) # 擷取命令結果 result = stdout.read() return result def upload(self,local_path, target_path): # 串連,上傳 sftp = paramiko.SFTPClient.from_transport(self.__transport) # 將location.py 上傳至伺服器 /tmp/test.py sftp.put(local_path, target_path)ssh = SSHConnection()ssh.connect()r1 = ssh.cmd(‘df‘)print(r1.decode())ssh.upload(‘c:\\temp\\aaa.txt‘, "/home/yli/s7.py")ssh.close()----------"C:\Program Files\Python3\python.exe" C:/s13課上代碼/s13day13課上代碼/s13day13_課上代碼/paramiko模組_demo.pyFilesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/centos-root 28813572 6760732 22052840 24% /devtmpfs 1011616 0 1011616 0% /devtmpfs 1021272 80 1021192 1% /dev/shmtmpfs 1021272 113928 907344 12% /runtmpfs 1021272 0 1021272 0% /sys/fs/cgroup/dev/sda1 508588 172604 335984 34% /boottmpfs 204256 12 204244 1% /run/user/42tmpfs 204256 0 204256 0% /run/user/0
本文出自 “麻婆豆腐” 部落格,請務必保留此出處http://beanxyz.blog.51cto.com/5570417/1875644
Python 學習筆記 - Paramiko 模組