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 连接。
相关推荐
好家伙VCC13 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
前端玖耀里14 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people14 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源14 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手15 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手15 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_9491465315 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn16 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结17 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒17 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr