You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python导出MikroTik文件遇错误,寻求解决方案

MikroTik文件导出到本地的Python实现问题

问题描述

尝试用Python将MikroTik设备中的文件导出到本地时,使用Paramiko执行命令出现错误expected end of command (line 1 column 41);尝试TFTP方式也未成功,以下是两段测试代码及问题分析与解决方案。


一、Paramiko实现的问题与修正

原代码及错误

import paramiko
from getpass import getpass
import time

HOST = 'xxx.xx.xx.xx'
PORT = 'xx'
USER = 'xxx'

if __name__ == '__main__':
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            
    password = getpass('Ingrese su contraseña: ')
    client.connect(HOST, PORT, username=USER, password=password, banner_timeout=200)
            
    stdin, stdout, stderr = client.exec_command('export file=/flash/prueba_export.backup to=C:/mikrotik')
            
    time.sleep(1)
            
    result = stdout.read().decode()
    print(result)

报错信息:expected end of command (line 1 column 41)

错误原因

MikroTik的export命令语法不支持直接指定本地路径to=C:/mikrotik,该命令仅用于将设备配置导出到设备自身的文件系统,无法直接推送到本地电脑。

修正方案

先通过export命令将配置导出到MikroTik设备的文件中,再通过SFTP协议将文件下载到本地:

import paramiko
from getpass import getpass

HOST = 'xxx.xx.xx.xx'
PORT = 'xx'
USER = 'xxx'
REMOTE_FILE = '/flash/prueba_export.backup'
LOCAL_FILE = 'C:/mikrotik/prueba_export.backup'

if __name__ == '__main__':
    password = getpass('请输入密码: ')
    
    # 建立SSH连接并导出配置到设备文件
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(HOST, int(PORT), username=USER, password=password, banner_timeout=200)
    
    # 执行导出命令(仅导出到设备本地)
    stdin, stdout, stderr = ssh_client.exec_command('/export file=' + REMOTE_FILE.split('/')[-1])
    # 等待命令执行完成
    stdout.channel.recv_exit_status()
    
    # 通过SFTP下载文件到本地
    sftp_client = ssh_client.open_sftp()
    sftp_client.get(REMOTE_FILE, LOCAL_FILE)
    
    # 关闭连接
    sftp_client.close()
    ssh_client.close()
    
    print(f"文件已成功下载到 {LOCAL_FILE}")

二、TFTP方式的实现说明

原代码问题

import tftpy

# Crea un cliente TFTP
client = tftpy.TftpClient('ip', 69)

# Descarga el archivo de configuración de Mikrotik
client.download('flash/prueba_export.backup', 'C:\\mikrotik/prueba_export.backup')

# Cierra la conexión TFTP
client.close()

这段代码未考虑MikroTik的TFTP服务配置要求,需要先在MikroTik设备上完成以下配置:

  • 启用TFTP服务:执行命令/ip tftp set enabled=yes root-dir=/flash(指定根目录为设备的flash分区)
  • 确保设备与本地电脑在同一网络,且防火墙允许TFTP(UDP 69端口)通信

修正后的TFTP客户端代码

import tftpy

# MikroTik设备IP和TFTP端口
MIKROTIK_IP = 'xxx.xx.xx.xx'
TFTP_PORT = 69
# 设备上的文件路径(相对于TFTP根目录)
REMOTE_FILE = 'prueba_export.backup'
# 本地保存路径
LOCAL_FILE = 'C:\\mikrotik\\prueba_export.backup'

if __name__ == '__main__':
    try:
        client = tftpy.TftpClient(MIKROTIK_IP, TFTP_PORT)
        # 下载文件,注意remote_path是TFTP根目录下的相对路径
        client.download(REMOTE_FILE, LOCAL_FILE)
        print(f"文件已通过TFTP成功下载到 {LOCAL_FILE}")
    except Exception as e:
        print(f"TFTP下载失败: {str(e)}")

备选TFTP方案:本地搭建TFTP服务器,让MikroTik上传

如果MikroTik无法作为TFTP服务器,也可以在本地搭建TFTP服务器,让MikroTik主动上传文件:

  1. 本地用tftpy启动TFTP服务器:
import tftpy

LOCAL_TFTP_DIR = 'C:\\mikrotik'
server = tftpy.TftpServer(LOCAL_TFTP_DIR)
server.listen('0.0.0.0', 69)
  1. 在MikroTik上执行上传命令(可通过Paramiko远程执行):
/file print file=prueba_export.backup
/file transfer src-path=/flash/prueba_export.backup dst-path=tftp://<本地电脑IP>/prueba_export.backup

内容的提问来源于stack exchange,提问作者mayra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:45:55