import netmiko import openpyxl from netmiko import ConnectHandler from openpyxl import load_workbook from concurrent.futures import ThreadPoolExecutor # 从excel中获取ip列表 def read_excel_ip(): """ 获取登录设备所需的ip地址 """ wb = load_workbook(filename='data.xlsx') dev_info = wb['Sheet1'] ip_list = [] for rows in range(2, dev_info.max_row + 1 ): row = dev_info.cell(rows, 1).value # 获取第一列值 ip_list.append(row) # 把第一列的每一行数据都返回给ip_list列表 return ip_list def read_username(): """ 获取登录设备所需的用户名 """ wb = load_workbook(filename='data.xlsx') dev_info = wb['Sheet1'] username_list = [] for rows in range(2, dev_info.max_row + 1 ): row = dev_info.cell(rows, 2).value # 获取第2列值 username_list.append(row) # 把第2列的每一行数据都返回给user_list列表 return username_list def read_password(): """ 获取登录设备所需的密码 """ wb = load_workbook(filename='data.xlsx') dev_info = wb['Sheet1'] passwrod_list = [] for rows in range(2, dev_info.max_row + 1 ): row = dev_info.cell(rows, 3).value # 获取第3列值 passwrod_list.append(row) # 把第3列的每一行数据都返回给passwor_list列表 return passwrod_list # 执行netmiko ssh操作 def ssh(ip,username,password): """ 通过netmiko登录设备,调用之前定义函数返回的ip,username,password 将配置文件自定义命名并保存到指定目录 """ try: devices = { 'device_type': 'huawei', 'ip': ip, 'username': username, 'password': str(password) } connect = ConnectHandler(**devices) print('Connect to ' + devices['ip']) output = connect.send_config_from_file("cmd.txt", enter_config_mode=False) print(output) #输出结果保存为文本。 with open(str(ip) + ".txt" , "w", encoding="utf=8") as log: log.write(output) except netmiko.exceptions.NetmikoTimeoutException: print(ip + " 登录超时") with open ("登录失败列表", "a+" ,encoding="utf-8") as failed_ip: failed_ip.write("\n" + ip) except netmiko.exceptions.NetmikoAuthenticationException: with open ("登录失败列表", "a+" ,encoding="utf-8") as failed_ip: failed_ip.write("\n" + ip) ip = read_excel_ip() # 将ip_list的值返回给read_excel_ip方法。 print(ip) username = read_username() print(username) password = read_password() print(password) pool = ThreadPoolExecutor(10) for ips, usernames, passwords in zip(ip, username, password):#多线程批量执行。 pool.submit(ssh,ips,usernames,passwords) #接收各个函数的值 在ssh中调用 pool.shutdown(True) """ for i in ip: # 取ip_list的ip,进行循环登录。 print(ssh(i)) with open ("登录失败列表" , "r", encoding="utf=8") as result: print("\n以下ip登录失败:") print(result.read()) """
标签:username,netmiko,批量,ip,list,华为,print,password,row From: https://www.cnblogs.com/yc-tec/p/16890638.html