Python paramiko


paramiko有兩個模塊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()

SFTPClient()也是使用transport來實現的,因此如果有需求需要執行命令和上傳文件糅合在一起的話,那么就需要使用transport的方式來實現。

用transport實現上傳下載以及命令的執行:

#coding:utf-8
import paramiko
import uuid

class SSHConnection(object):

    def __init__(self, host='192.168.2.103', port=22, username='root',pwd='123456'):
        self.host = host
        self.port = port
        self.username = username
        self.pwd = pwd
        self.__k = None

    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 upload(self,local_path,target_path):
        # 連接,上傳
        # file_name = self.create_file()
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 將location.py 上傳至服務器 /tmp/test.py
        sftp.put(local_path, target_path)

    def download(self,remote_path,local_path):
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        sftp.get(remote_path,local_path)

    def cmd(self, command):
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        # 執行命令
        stdin, stdout, stderr = ssh.exec_command(command)
        # 獲取命令結果
        result = stdout.read()
        print (str(result,encoding='utf-8'))
        return result

ssh = SSHConnection()
ssh.connect()
ssh.cmd("ls")
ssh.upload('s1.py','/tmp/ks77.py')
ssh.download('/tmp/test.py','kkkk',)
ssh.cmd("df")
ssh.close()

 在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

4.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM