python paramiko模块

  paramiko模块提供了进行远程登陆服务器执行命令和上传下载功能。使用之前要进行安装:pip install paramiko

  (1)基于用户名和密码的连接

import paramiko

ssh = paramiko.SSHClient()    #建立一个sshclient对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())     #允许将信任的主机自动加入到host_allow列表
ssh.connect('10.100.46.101',22,'root','123456')    #连接主机
stdin,stdout,stderr = ssh.exec_command('df -h')    #执行命令
print(stdout.read().decode())    #结果放到stdout中,如果有错误放到stderr中,一定要添加decode()
ssh.close()

  使用类封装,同时将主机信息放到config.ini配置文件中。

import paramiko
import configparser

class ParamikoClient():
        def __init__(self,ini_file):
                self.ssh = paramiko.SSHClient()
                self.config = configparser.ConfigParser()
                self.config.read(ini_file)
                self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                self.ssh.connect(hostname=self.config.get('ssh','host'),port=self.config.getint('ssh','port'),username=self.config.get('ssh','usr'),password=self.config.get('ssh','pwd'),timeout=self.config.getfloat('ssh','timeout'))

        def run_command(self,cmd_str):
                stdin,stdout,stderr = self.ssh.exec_command(cmd_str)
                print(stdout.read().decode())
                self.ssh.close()

client = ParamikoClient('config.ini')
client.run_command('df -h')

  (2)文件上传和下载

import os,sys
import paramiko

t = paramiko.Transport('10.100.46.101',22)    #建立一个加密的传输管道
t.connect(username='root',password='123456')    #建立连接
sftp = paramiko.SFTPClient.from_transport(t)     #建立一个sftp客户端对象,通过ssh transport操作远程文件
#sftp.put('config.ini','/tmp/config.ini')     #上传本地文件到远程主机
sftp.get('/tmp/test.txt','test.txt')        #从远程主机上下载文件到本地
t.close()

  (3)通过SSH连接服务器

import paramiko

s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())       #允许连接不在know_hosts文件中的主机
key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')      #建立私钥文件连接
s.connect(hostname='10.100.46.101',port=22,username='root',pkey=key)   #通过私钥验证的方式远程登陆主机
stdin,stdout,stderr = s.exec_command('df -h')
print(stdout.read().decode())

  (4)多线程进行文件上传和下载

from threading import Thread
import paramiko
import configparser
#使用多线程进行文件上传和下载
class ParamikoClient():
    def __init__(self,file_ini):
        self.t = paramiko.Transport('10.100.46.106',22)
        self.config = configparser.ConfigParser()
        self.config.read(file_ini)
        self.t.connect(username=self.config.get('ssh','usr'),password=self.config.get('ssh','pwd'))
        self.sftp = paramiko.SFTPClient.from_transport(self.t)
#        self.t.close()
def run_upload():
    client = ParamikoClient('config1.ini')
    client.sftp.put('ajax01.html','/tmp/ajax02.html')
    client.t.close()
def run_download():
    client = ParamikoClient('config1.ini')
    client.sftp.get('/tmp/ajax01.html','ajax02.html')
    client.t.close()
t = Thread(target=run_upload())
t1 = Thread(target=run_download())
t.start()
t1.start()

 

原文地址:https://www.cnblogs.com/homle/p/8728048.html