python paramiko模块学习分享

发布时间 - 2026-01-11 02:55:18    点击率:

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  # paramiko  # 模块  # Python Paramiko模块的使用实际案例  # python的paramiko模块实现远程控制和传输示例  # windows下python安装paramiko模块和pycrypto模块(简单三步)  # Python Paramiko模块的安装与使用详解  # Python使用Paramiko模块编写脚本进行远程服务器操作  # python下paramiko模块实现ssh连接登录Linux服务器  # python使用paramiko模块实现ssh远程登陆上传文件并执行  # windows下安装python paramiko模块的代码  # Python paramiko模块的使用示例  # 两种  # 公钥  # 传至  # 文件上传  # 几个  # 是一种  # 让我们  # 这样一个  # 另外一个  # 装了  # 连接到  # 创建一个  # 大家多多  # 远端  # 文件传输  # 实现远程  # 目录下  # nbsp  # html  # strong 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  大连网站制作公司哪家好一点,大连买房网站哪个好?  百度浏览器如何管理插件 百度浏览器插件管理方法  如何快速搭建个人网站并优化SEO?  Android实现代码画虚线边框背景效果  如何用PHP快速搭建高效网站?分步指南  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  网站建设整体流程解析,建站其实很容易!  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何快速搭建虚拟主机网站?新手必看指南  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何在阿里云部署织梦网站?  Laravel如何处理和验证JSON类型的数据库字段  Swift中switch语句区间和元组模式匹配  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  linux top下的 minerd 木马清除方法  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  中山网站推广排名,中山信息港登录入口?  无锡营销型网站制作公司,无锡网选车牌流程?  如何在阿里云购买域名并搭建网站?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  浅谈Javascript中的Label语句  如何在建站之星绑定自定义域名?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何快速搭建二级域名独立网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  详解CentOS6.5 安装 MySQL5.1.71的方法  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  晋江文学城电脑版官网 晋江文学城网页版直接进入  jquery插件bootstrapValidator表单验证详解  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何彻底卸载建站之星软件?  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  iOS发送验证码倒计时应用  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel如何使用Livewire构建动态组件?(入门代码)  如何在服务器上配置二级域名建站?  Linux安全能力提升路径_长期防护思维说明【指导】  如何快速辨别茅台真假?关键步骤解析  高端建站如何打造兼具美学与转化的品牌官网?  如何在自有机房高效搭建专业网站?  Laravel如何实现用户密码重置功能?(完整流程代码)  EditPlus 正则表达式 实战(3)