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', }只能在这里面执行一条命令。请问有没有大神能指点一下如何执行多条命令备份在一个文件里面呢?