paramiko 模块

paramiko 是一个 Python 模块,用于实现 SSH 协议,并提供了一个强大的接口来执行远程命令、管理远程文件等操作。它是一个非常流行的用于自动化和脚本化远程服务器管理的工具。

类/方法/属性 描述
paramiko.SSHClient 用于建立 SSH 连接的类,提供执行命令和传输文件的方法。
paramiko.Transport 底层传输类,用于建立 SSH 连接。
paramiko.SFTPClient 用于通过 SSH 进行文件传输的类。
paramiko.AutoAddPolicy SSH 服务器主机密钥策略,用于自动添加未知的主机密钥到本地主机密钥存储中。
paramiko.client.connect() SSHClient 类的静态方法,用于建立 SSH 连接。
paramiko.client.exec_command() SSHClient 类的方法,用于在远程服务器上执行命令。
paramiko.client.open_sftp() SSHClient 类的方法,用于打开 SFTP 会话。
paramiko.client.load_system_host_keys() SSHClient 类的方法,用于加载系统主机密钥。
paramiko.client.set_missing_host_key_policy() SSHClient 类的方法,用于设置缺失主机密钥策略。
paramiko.client.close() SSHClient 类的方法,用于关闭 SSH 连接。
paramiko.sftp.SFTPClient.put() SFTPClient 类的方法,用于将文件上传到远程服务器。
paramiko.sftp.SFTPClient.get() SFTPClient 类的方法,用于从远程服务器下载文件。
paramiko.sftp.SFTPClient.listdir() SFTPClient 类的方法,用于列出远程目录的内容。
paramiko.sftp.SFTPClient.mkdir() SFTPClient 类的方法,用于在远程服务器上创建目录。
paramiko.sftp.SFTPClient.remove() SFTPClient 类的方法,用于删除远程服务器上的文件。
paramiko.sftp.SFTPClient.rename() SFTPClient 类的方法,用于重命名远程服务器上的文件或目录。

封装 Transport 示例

以下是封装 paramiko.Transport 类的示例代码,用于管理 SSH 连接、执行远程命令和进行文件传输:

python 复制代码
import paramiko
from paramiko import Transport, SFTPClient


class SSHTransport:
    def __init__(self, hostname, port=22, username=None, password=None, pkey=None):
        self.hostname = hostname
        self.port = port
        self.username = username
        self.password = password
        self.pkey = pkey
        self.transport = None

    def connect(self):
        self.transport = Transport((self.hostname, self.port))
        self.transport.connect(username=self.username, password=self.password, pkey=self.pkey)

    def execute_command(self, command):
        if self.transport is None or not self.transport.is_active():
            raise Exception("Transport is not connected")

        session = self.transport.open_session()
        session.exec_command(command)
        stdout = session.makefile('r', -1)
        stderr = session.makefile_stderr('r', -1)
        return stdout.read(), stderr.read()

    def upload_file(self, local_path, remote_path):
        if self.transport is None or not self.transport.is_active():
            raise Exception("Transport is not connected")

        sftp = SFTPClient.from_transport(self.transport)
        sftp.put(local_path, remote_path)
        sftp.close()

    def download_file(self, remote_path, local_path):
        if self.transport is None or not self.transport.is_active():
            raise Exception("Transport is not connected")

        sftp = SFTPClient.from_transport(self.transport)
        sftp.get(remote_path, local_path)
        sftp.close()

    def close(self):
        if self.transport is not None:
            self.transport.close()


# 使用示例
ssh_transport = SSHTransport('192.168.226.26', username='root', password='lzz2578+')
ssh_transport.connect()

# 执行远程命令
stdout, stderr = ssh_transport.execute_command('ls -l')
print('STDOUT:', stdout.decode('utf-8'))
print('STDERR:', stderr.decode('utf-8'))

# 上传文件
ssh_transport.upload_file('log.txt', 'log.txt')

# 下载文件
ssh_transport.download_file('log.txt', 'log.txt')

# 关闭连接
ssh_transport.close()

说明

  • connect: 建立 SSH 连接。
  • execute_command: 执行远程命令并返回标准输出和标准错误。
  • upload_file: 上传本地文件到远程服务器。
  • download_file: 从远程服务器下载文件到本地。
  • close: 关闭 SSH 连接。
相关推荐
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
风等雨归期1 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
Adolf_19931 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^1 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
NLP工程化2 小时前
对 Python 中 GIL 的理解
python·gil
极客代码2 小时前
OpenCV Python 深度指南
开发语言·人工智能·python·opencv·计算机视觉
liO_Oil2 小时前
(2024.9.19)在Python的虚拟环境中安装GDAL
开发语言·python·gdal安装