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实现数通设备端口使用情况监控实例
Jul 15 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
python 实现敏感词过滤的方法
Jan 21 Python
Python交互式图形编程的实现
Jul 25 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
Pytorch之finetune使用详解
Jan 18 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
Flask中jinja2的继承实现方法及实例
Mar 03 Python
python获取对象信息的实例详解
Jul 07 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/01/10 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
php字符串分割函数用法实例
2015/03/17 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
wxPython实现分隔窗口
2019/11/19 Python
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
高考备战决心书
2014/03/11 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
组织鉴定材料
2014/06/02 职场文书
生物技术专业求职信
2014/06/10 职场文书
捐书倡议书
2014/08/29 职场文书
个人委托书范文
2015/01/28 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS