当前位置: 首页 > news >正文

Paramiko 使用教程

目录

  • 简介
  • 安装 Paramiko
  • 连接到远程服务器
  • 执行远程命令
  • 文件传输
  • 示例

简介

Paramiko 是一个基于 Python 的 SSH 客户端库,它提供了在网络上安全传输文件和执行远程命令的功能。本教程将介绍 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输等常见操作。

安装 Paramiko

可以使用 pip 命令安装 Paramiko:

pip install paramiko

连接到远程服务器

创建一个 SSHClient 对象,使用 connect() 方法连接到远程服务器:

# 创建 SSHClient 实例
ssh_client = paramiko.SSHClient()
# 允许连接不在 known_hosts 文件中的主机
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程服务器
ssh_client.connect(hostname, port, username, password)

执行远程命令

使用 exec_command() 方法执行远程命令,并获取输入、输出和错误流:

# 执行远程命令
stdin, stdout, stderr = ssh_client.exec_command(command)
# 向执行命令写入信息(一般交互式命令会用到)
stdin.write(content)
# 读取执行命令的输出信息
output = stdout.read().decode()
# 读取执行命令的报错信息
error = stderr.read().decode()

文件传输

创建一个 SFTPClient 对象,使用 put() 和 get() 方法上传和下载文件:

# 创建 SFTPClient 实例
sftp_client = ssh_client.open_sftp()
# 上传文件
sftp_client.put(local_path, remote_path)
# 下载文件
sftp_client.get(remote_path, local_path)

示例

下面是一个完整示例,演示了 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输等常见操作:

import paramiko
import timedef ssh_connect(hostname, port, username, password):# 创建 SSHClient 实例ssh_client = paramiko.SSHClient()# 允许连接不在 known_hosts 文件中的主机ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接到远程服务器ssh_client.connect(hostname, port, username, password)return ssh_clientdef ssh_vim(ssh_client, path):# 执行 vim 命令,并获取输入、输出和错误流stdin1, stdout1, stderr1 = ssh_client.exec_command(f'vim {path}')# 进入插入模式stdin1.write('i')# 插入文本stdin1.write('Hello World!')# esc 键,退出插入模式stdin1.write('\x1b')# 保持并退出stdin1.write(':wq\n')# 关闭执行命令的输入流stdin1.close()# 等待 3 秒后,再查看文件内容,太快可能获取不到最新的文件内容time.sleep(3)# 执行 cat 命令,并获取输入、输出和错误流stdin2, stdout2, stderr2 = ssh_client.exec_command(f'cat {path}')# 读取执行命令的输出信息和错误信息,并输出到控制台print(stdout2.read().decode(), stderr2.read().decode())def sftp_put(ssh_client, local_path, remote_path):# 创建 SFTPClient 实例sftp_client = ssh_client.open_sftp()# 上传文件sftp_client.put(local_path, remote_path)# 关闭 SFTP 连接sftp_client.close()def sftp_get(ssh_client, remote_path, local_path):# 创建 SFTPClient 实例sftp_client = ssh_client.open_sftp()# 下载文件sftp_client.get(remote_path, local_path)# 关闭 SFTP 连接sftp_client.close()if __name__ == '__main__':# 连接到远程服务器ssh_client = ssh_connect(hostname, port, username, password)# 执行 vim 命令ssh_vim(ssh_client, path)# 上传文件sftp_put(ssh_client, local_path, remote_path)# 下载文件sftp_get(ssh_client, remote_path, local_path)# 关闭 SSH 连接ssh_client.close()

相关文章:

  • [特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
  • css button 点击效果
  • Github 2025-04-17 Go开源项目日报 Top9
  • Go:低级编程
  • QT 初体验
  • 无源蓝牙技术与传统RFID(射频识别)对比
  • 使用DDR4控制器实现多通道数据读写(八)
  • 在极狐GitLab 身份验证中如何使用 OIDC?
  • 大数据分析02 基础语法差异
  • 【FFmpeg从入门到精通】第二章-FFmpeg工具使用基础
  • Java虚拟机(JVM)平台无关?相关?
  • BFC详解
  • uniapp上传图片时(可选微信头像、相册、拍照)
  • 基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南
  • ETL数据集成平台在电商行业五大应用场景
  • 阅读分析Linux0.11 /boot/head.s
  • kotlin + spirngboot3 + spring security6 配置登录与JWT
  • Java如何在遍历集合时删除特定元素
  • 【Pandas】pandas DataFrame get
  • 2025.04.17【Stacked area】| 生信数据可视化:堆叠区域图深度解析
  • 河南:响鼓重锤对违规吃喝问题露头就打、反复敲打、人人喊打
  • 呼吸医学专家杜晓华博士逝世,终年50岁
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 沈阳卫健委通报“健康证”办理乱象:涉事医院已被立案查处
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 吉林:消纳绿电,“氢”装上阵