博客
关于我
paramiko模块
阅读量:794 次
发布时间:2023-02-26

本文共 3259 字,大约阅读时间需要 10 分钟。

paramiko模块简介及使用实例

paramiko 是一个基于 SSH 协议的模块,用于连接远程服务器并执行相关操作。它主要包含两个核心组件:SSHClient 和 SFTPClient。通过 paramiko,可以实现远程服务器的命令执行、文件上传下载等功能。该模块在 fabric 和 ansible 等工具中也被广泛使用,是实现远程管理的重要基础。

使用 paramiko 模块实现 SSHClient

2.1 SSHClient 没有封装 Transport 的用法

在这种方法中,我们直接创建 SSHClient 实例并通过连接参数(如 hostname、username 和 password)建立远程会话。适用于简单的命令执行操作。

# -*- coding: utf-8 -*-import paramiko# 创建 SSH 客户端实例ssh = paramiko.SSHClient()# 允许连接不在 ~/.ssh/known_hosts 文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接到服务器ssh.connect(hostname='xxx.xxx.xxx.xxx', port=22, username='username', password='password')# 执行命令stdin, stdout, stderr = ssh.exec_command('df -h')result = stdout.read()# 输出结果,默认为 bytes 类型print(result.decode(encoding="utf-8"))# 关闭连接ssh.close()

运行该脚本后,会输出远程服务器的磁盘使用情况。

2.2 SSHClient 封装 Transport 的用法

这种方法通过创建 Transport 实例并将其封装到 SSHClient 中,实现了对 SSH 连接的更高级管理。适用于需要长时间保持连接的场景。

# -*- coding: utf-8 -*-import paramiko# 创建 Transport 实例并连接到服务器transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22))transport.connect(username='username', password='password')# 创建 SSH 客户端实例,并将现有的 Transport 实例绑定ssh = paramiko.SSHClient()ssh._transport = transport# 执行命令stdin, stdout, stderr = ssh.exec_command('w')result = stdout.read()# 输出结果,默认为 bytes 类型print(result.decode(encoding="utf-8"))# 关闭连接transport.close()

运行该脚本后,会显示远程服务器的系统信息。

2.3 基于 SSH 免密登录的私钥连接

在这种方法中,我们使用 RSA 私钥文件实现免密登录,更加安全且灵活。

# -*- coding: utf-8 -*-import paramiko# 读取私钥文件private_key = paramiko.RSAKey.from_private_key_file('/home/username/.ssh/id_rsa')# 创建 Transport 实例并连接到服务器transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22))transport.connect(username='username', pkey=private_key)# 创建 SSH 客户端实例,并将现有的 Transport 实例绑定ssh = paramiko.SSHClient()ssh._transport = transport# 执行命令stdin, stdout, stderr = ssh.exec_command('uptime')result = stdout.read()# 输出结果,默认为 bytes 类型print(result.decode(encoding="utf-8"))# 关闭连接transport.close()

运行该脚本后,会显示远程服务器的 uptime 信息。

使用 paramiko 模块实现 SFTPClient

3.1 基于用户名密码的文件上传下载

这种方法使用 SFTPClient 来实现文件的上传和下载操作。

# -*- coding: utf-8 -*-import paramiko# 创建 Transport 实例并连接到服务器transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22))transport.connect(username='username', password='password')# 创建 SFTP 客户端实例,并将现有的 Transport 实例绑定sftp = paramiko.SFTPClient.from_transport(transport)# 上传本地文件到服务器local_path = 'E:/GitHub/Python-Learning/work/2018-07-27/auto_task.yml'remote_path = '/tmp/auto_task.yml'sftp.put(local_path, remote_path)# 下载服务器上的文件到本地remote_path = '/root/nohup.out'local_path = 'E:/GitHub/Python-Learning/work/2018-07-27/nohup.out'sftp.get(remote_path, local_path)# 关闭连接transport.close()

运行该脚本后,会将指定文件从本地上传到服务器或从服务器下载到本地。

3.2 基于 SSH 免密登录的私钥文件上传下载

这种方法同样使用 SFTPClient,但使用私钥文件实现免密登录。

# -*- coding: utf-8 -*-import paramiko# 读取私钥文件private_key = paramiko.RSAKey.from_private_key_file('/home/username/.ssh/id_rsa')# 创建 Transport 实例并连接到服务器transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22))transport.connect(username='username', pkey=private_key)# 创建 SFTP 客户端实例,并将现有的 Transport 实例绑定sftp = paramiko.SFTPClient.from_transport(transport)# 上传本地文件到服务器local_path = '/tmp/location.py'remote_path = '/tmp/test.py'sftp.put(local_path, remote_path)# 下载服务器上的文件到本地remote_path = 'remove_path'local_path = 'local_path'sftp.get(remote_path, local_path)# 关闭连接transport.close()

运行该脚本后,会实现文件的上传和下载操作。

转载地址:http://ttvfk.baihongyu.com/

你可能感兴趣的文章
Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
查看>>
Panalog 日志审计系统 前台RCE漏洞复现
查看>>
PANDA VALUE_COUNTS包含GROUP BY之前的所有值
查看>>
Pandas - 有条件的删除重复项
查看>>
pandas -按连续日期时间段分组
查看>>
pandas -更改重新采样的时间序列的开始和结束日期
查看>>
SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
查看>>
pandas :to_excel() float_format
查看>>
pandas :加入有条件的数据框
查看>>
pandas :将多列汇总为一列,没有最后一列
查看>>
pandas :将时间戳转换为 datetime.date
查看>>
pandas :将行取消堆叠到新列中
查看>>
pandas DataFrame 中的自定义浮点格式
查看>>
Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
查看>>
Pandas DataFrame中删除列级的方法链接解决方案
查看>>
Pandas DataFrame中的列从浮点数输出到货币(负值)
查看>>
Pandas DataFrame中的列从浮点数输出到货币(负值)
查看>>
Pandas DataFrame多索引透视表-删除空头和轴行
查看>>
pandas DataFrame的一些操作
查看>>
Pandas Dataframe的日志文件
查看>>