python paramiko模块学习分享


Posted in Python onAugust 23, 2017

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。

首先让我们理清以下几个名词:

SSHClient:包装了Channel、Transport、SFTPClient
Channel:是一种类Socket,一种安全的SSH传输通道;
Transport:是一种加密的会话(但是这样一个对象的Session并未建立),并且创建了一个加密的tunnels,这个tunnels叫做Channel;
Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话.

paramiko 参考http://docs.paramiko.org/en/2.0/index.html 

下载安装

pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto

pip3 install pycrypto
pip3 install paramiko 

具体模块使用 

SSHClient:

远程连接分为两种:(1)基于用户名密码连接 (2)基于公钥秘钥连接

通过是用paramiko远程操作,其实本质也分为两种:(1)只用SSHClient (2)自己创建一个transport 

基于用户名密码连接 

import 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')
# 执行命令  stdout命令结果,stderr错误
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令结果 
result = stdout.read()
# 关闭连接
ssh.close()

SSHClient 封装 Transport

import paramiko
 
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', password='123')
 
ssh = paramiko.SSHClient()
ssh._transport = transport
 
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
 
transport.close()

基于公钥秘钥连接

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='host', port=22, username='root', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

SSHClient 封装Transport

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
transport.close()

SFTPClient:

用于连接远程服务器并进行上传下载功能。

基于用户名密码上传下载

import paramiko
 
transport = paramiko.Transport(('hostname',22))
transport.connect(username='root',password='123')
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()

基于公钥秘钥上传下载

import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
 
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', pkey=private_key )
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()

Demo: 实现远程命令执行和文件上传

import paramiko
 
class SSHConnection(object):
 
  def __init__(self, host='192.168.12.68', port=22, username='locojoy',pwd='123321QQ!'):
    self.host = host
    self.port = port
    self.username = username
    self.pwd = pwd
    self.__k = None
 
  def run(self):
    self.connect() # 连接远程服务器
    self.upload('db.py','/tmp/1.py') # 将本地的db.py文件上传到远端服务器的/tmp/目录下并改名为1.py
    self.cmd('df') # 执行df 命令
    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 upload(self,local_path,target_path):
    sftp = paramiko.SFTPClient.from_transport(self.__transport)
    sftp.put(local_path,target_path)
 
  def cmd(self, command):
    ssh = paramiko.SSHClient()
    ssh._transport = self.__transport
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(command)
    # 获取命令结果
    result = stdout.read()
    print(result)
    return result
 
obj = SSHConnection()
obj.run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python计算回文数的方法
Mar 11 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Selenium的使用详解
Oct 19 Python
Python中fnmatch模块的使用详情
Nov 30 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
wxPython多个窗口的基本结构
Nov 19 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
定制FileField中的上传文件名称实例
Aug 23 #Python
基于python元祖与字典与集合的粗浅认识
Aug 23 #Python
Python 多线程Threading初学教程
Aug 22 #Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 #Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 #Python
Python实现的矩阵类实例
Aug 22 #Python
Python实现图片转字符画的示例
Aug 22 #Python
You might like
php文件操作实例代码
2012/05/10 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
子页向父页传值示例
2013/11/27 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
python修改操作系统时间的方法
2015/05/18 Python
利用python发送和接收邮件
2016/09/27 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
成教自我鉴定
2013/10/27 职场文书
电子商务个人自荐信
2013/12/12 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
销售人员求职信
2014/07/22 职场文书
好的促销活动方案
2014/08/21 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
刑事撤诉申请书
2015/05/18 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Spring实现内置监听器
2021/07/09 Java/Android