Python 學習筆記 - Paramiko 模組

來源:互聯網
上載者:User

標籤: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 模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.