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中定义和使用抽象类的方法
Jun 30 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
python之文件读取一行一行的方法
Jul 12 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python 导入文件过程图解
Oct 15 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
python操作redis数据库的三种方法
Sep 10 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
Pandas直接读取sql脚本的方法
Jan 21 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
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
js模糊查询实例分享
2016/12/26 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
python获取list下标及其值的简单方法
2016/09/12 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
求职简历中自我评价
2014/01/28 职场文书
小学生检讨书大全
2014/02/06 职场文书
公路绿化方案
2014/05/12 职场文书
政府法律服务方案
2014/06/14 职场文书
宣传标语大全
2014/07/01 职场文书
个人安全生产责任书
2014/07/28 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书