吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 341|回复: 9
上一主题 下一主题
收起左侧

[Python 原创] 批量上传交换机配置到本地FTP

[复制链接]
跳转到指定楼层
楼主
hoochanlon 发表于 2024-11-22 13:55 回帖奖励

设计思路:通过本地电脑开启FTP作为服务器,然后登上交换机,交换机再通过FTP传到本地电脑去。

后续过程:在调试过程中注意到在交换机中 put 指令不支持中文名上传。先使用拼音,再改名,csv文件再新增一列拼音,方便后续从拼音替换为中文。

所需软件:IPOP,或其他FTP软件。

地址及源码:

import paramiko
import time
import os
import csv

# 获取当前用户桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

# 读取 CSV 文件并逐行处理
csv_file_path = os.path.join(desktop_path, "SSH登记表.csv")  # 假设 CSV 文件在桌面
# ftp_server_ip = "192.168.1.58"  # 本机的 FTP 服务 IP 地址
ftp_server_ip = "172.16.1.55" 
ftp_username = "admin"  # FTP 用户名
ftp_password = "123"  # FTP 密码

try:
    with open(csv_file_path, "r", encoding="utf-8") as csv_file:
        csv_reader = csv.reader(csv_file)

        for row in csv_reader:
            # 解析每一行数据
            if len(row) < 6:  # 如果行的列数不足,跳过
                print(f"跳过格式不正确的行: {row}")
                continue

            device_name, alias_name, hostname, username, password, port = row
            port = int(port)

            print(f"正在连接到 {hostname} ({device_name}),端口 {port}...")

            # FTP 文件名(初始为 alias_name)
            ftp_filename = f"{alias_name}_backup.zip"

            # 创建 SSH 客户端
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            try:
                # 连接到交换机
                client.connect(hostname, port=port, username=username, password=password)

                # 打开交互式 shell
                shell = client.invoke_shell()
                time.sleep(1)

                # 启动 FTP 服务上传文件
                shell.send(f"ftp {ftp_server_ip}\n")
                time.sleep(2)
                shell.send(f"{ftp_username}\n")  # 输入 FTP 用户名
                time.sleep(1)
                shell.send(f"{ftp_password}\n")  # 输入 FTP 密码
                time.sleep(1)

                # 上传配置文件
                print(f"开始上传配置文件到 FTP 服务器,文件名: {ftp_filename}")
                shell.send("binary\n")  # 切换到二进制模式
                shell.send(f"put vrpcfg.zip {ftp_filename}\n")  # 上传文件
                time.sleep(5)  # 等待上传完成

                # 退出 FTP
                shell.send("quit\n")
                time.sleep(1)

                # 重命名为 device_name
                new_filename = f"{device_name}_backup.zip"
                local_path = os.path.join(desktop_path,"本机开启FTP交换机上传文件到此目录", ftp_filename) # 拼接 FTP服务器保存的指定目录
                renamed_path = os.path.join(desktop_path,"本机开启FTP交换机上传文件到此目录", new_filename)

                if os.path.exists(local_path):  # 如果文件存在,重命名为中文名
                    os.rename(local_path, renamed_path)
                    print(f"文件已重命名为: {renamed_path}")
                else:
                    print(f"文件上传后未找到: {local_path}")

            except Exception as e:
                print(f"处理设备 {device_name} ({hostname}) 时出错: {e}")

            finally:
                client.close()

except FileNotFoundError:
    print(f"CSV 文件未找到,请确认路径是否正确: {csv_file_path}")
except Exception as e:
    print(f"处理 CSV 文件时发生错误: {e}")

演示效果

PixPin_2024-11-22_11-47-02.PNG

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
JuncoJet 发表于 2024-11-22 14:16
XPOP是啥软件   功能好多啊
3#
redapple2015 发表于 2024-11-22 14:45
4#
JuncoJet 发表于 2024-11-22 14:57
5#
leeao1936 发表于 2024-11-22 15:46

蛮方便的,谢谢大神分享
6#
q3125418 发表于 2024-11-22 16:14
额。。你这输出也没个日期,
import paramiko
device_name = section
current_time = time.strftime("%Y-%m-%d_%H-%M-%S")
filename = f"{device_name}_{current_time}.cfg"
tftp_command = f"tftp x.x.x.x put flash:/startup.cfg {filename}\n"
7#
 楼主| hoochanlon 发表于 2024-11-22 16:21 |楼主
q3125418 发表于 2024-11-22 16:14
额。。你这输出也没个日期,
import paramiko
device_name = section

也可以。不打算加日期的,可以说当时只为自己考虑去了,没想这么全。下面这个是加了日期文件夹统一存放,其实看公司要求了,加日期肯定更好。

单个与批量交换机配置备份
https://www.52pojie.cn/thread-1984161-1-1.html
(出处: 吾爱破解论坛)

8#
yoga2joker 发表于 2024-11-22 16:51
先收藏了,谢谢分享
9#
daxueshengserve 发表于 2024-11-22 19:23
支持技术贴,绑定
10#
BrutusScipio 发表于 2024-11-23 12:25
不过ftp保存为zip 如果要读取又需要解压 反正都是文本文件没什么必要吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表