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 连接。
相关推荐
倔强青铜三7 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户25191624271110 小时前
Python之语言特点
python
刘立军10 小时前
使用pyHugeGraph查询HugeGraph图数据
python·graphql
数据智能老司机14 小时前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机15 小时前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
c8i16 小时前
django中的FBV 和 CBV
python·django
c8i16 小时前
python中的闭包和装饰器
python
这里有鱼汤19 小时前
小白必看:QMT里的miniQMT入门教程
后端·python
TF男孩1 天前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
该用户已不存在1 天前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust