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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
python实现贪吃蛇小游戏
Mar 21 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
Python实现上下文管理器的方法
Aug 07 Python
pandas抽取行列数据的几种方法
Dec 13 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP网站提速三大“软”招
2006/10/09 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
php二维码生成
2015/10/19 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
在Python下尝试多线程编程
2015/04/28 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
Python中捕获键盘的方式详解
2019/03/28 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
建筑实习自我鉴定
2013/10/18 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
婚前保证书
2014/04/29 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
法人代表证明书
2014/09/18 职场文书
出纳年终工作总结2014
2014/12/05 职场文书