python ssh登录华三交换机批量备份文件

import paramiko
import re
from datetime import datetime
import os
import threading

# 配置信息
USERNAME = 'admin'
PASSWORD = 'shenzhen@123'
DEVICE_LIST_PATH = 'device_list.txt'
BACKUP_PATH = 'D:\\Backup\\'

# 确保备份目录存在
if not os.path.exists(BACKUP_PATH):
    os.makedirs(BACKUP_PATH)
    print(f"{BACKUP_PATH} 创建成功!")
else:
    print(f"{BACKUP_PATH} 目录已存在")

# 读取设备IP列表
with open(DEVICE_LIST_PATH, 'r') as file:
    device_ips = [line.strip() for line in file.readlines()]


def backup_device_config(ip):
    try:
        # 创建SSH客户端并连接到设备
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname=ip, username=USERNAME, password=PASSWORD)

        # 命令列表和对应的文件名前缀
        commands = {
            'dis cu': 'config',
            'dis version': 'version',
            'dis lldp ne list': 'lldp_neighbors',
        }

        # 遍历每个命令
        for command, filename_prefix in commands.items():
            # 发送命令并获取输出
            stdin, stdout, stderr = client.exec_command(command)
            output = stdout.read().decode('utf-8', errors='ignore')

            # 提取设备名称(可以根据实际输出调整正则表达式)
            device_name = re.search(r'<(.*)>', output).group(1) if re.search(r'<(.*)>', output) else 'Unknown'

            # 生成备份文件名
            backup_filename = f"{device_name}_{ip}_{filename_prefix}_{datetime.now().strftime('%Y%m%d%H%M%S')}.txt"
            backup_path_full = os.path.join(BACKUP_PATH, backup_filename)

            # 保存配置到文件
            with open(backup_path_full, 'w') as file:
                file.write(output)
            print(f"设备 {ip} 的 {command} 命令输出已备份到 {backup_path_full}")

    except Exception as e:
        print(f"设备 {ip} 备份失败: {str(e)}")
    finally:
        # 关闭SSH连接
        client.close()


# 使用线程并行备份设备配置
threads = []
for ip in device_ips:
    t = threading.Thread(target=backup_device_config, args=(ip,))
    t.start()
    threads.append(t)

# 等待所有线程完成
for t in threads:
    t.join()

print("所有设备配置备份完成。")

”设备 40.40.40.1 的 dis cu 命令输出已备份到 D:\Backup\ZN_B1_11F_255.39_40.40.40.1_config_20240322171858.txt
设备 40.40.40.1 备份失败: ChannelException(1, 'Administratively prohibited')
所有设备配置备份完成。
Secsh channel 1 open FAILED: open failed: Administratively prohibited“

这是脚本执行后的报错, commands = { 'dis cu': 'config', 'dis version': 'version', 'dis lldp ne list': 'lldp_neighbors', }只能在这里面执行一条命令。请问有没有大神能指点一下如何执行多条命令备份在一个文件里面呢?

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值