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·双曲空间·微分几何·geomstats·庞加莱圆盘·球面
weixin_431600441 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
讲温控就好了1 小时前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能
人工智能·python·能源
DeepVisionary2 小时前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“
python·自动化
固定资产管理系统软件3 小时前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
TheBestRucy4 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
lancyu4 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗4 小时前
Claude 使用指南
开发语言·python
工具分享4 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI5 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt