Python通过telnet批量管理配置华为交换机

2023-12-23 20:46:19

名称:Python通过telnet批量管理配置华为交换机

测试工具:ensp, Visual Studio Code , Python3.8环境
时间:2023.12.23
个人备注:在NB 项目中,可以批量登录修改交换机配置,以此满足甲方爸爸的无故增加的需求。

1. 脚本需要用到的CVS表格文件

user-cmd.csv   #用于保存需要配置到交换机命令
user-info.csv  #用于保存交换机IP,用户名,密码

2. 下面是表格内容示范

在这里插入图片描述
在这里插入图片描述

3. eSNP 拓扑示例

在这里插入图片描述

4. 脚本文件,需要自己提前下载好对应的模块。

import telnetlib
import time
import getpass
from netmiko.huawei.huawei import HuaweiTelnet
import pandas as pd


# 用法示例
文件路径 = 'user-info.csv'
命令表格= 'user-cmd.csv'
telnet端口 = 23  # 根据实际情况修改端口号
#命令列表 = ['display ip int brief | include Vlan','dis version']
#telnet主机 = '192.168.56.10'
#用户名 = 'admin'
#密码 = 'abc-123'


 ###########交换机 IP,账户,密码调用
def 提取IP账户密码信息(文件路径):
    # 用 pandas 的 read_csv 方法读取 CSV 文件
    表格数据 = pd.read_csv(文件路径)

    # 提取 IP、账户和密码列的数据
    ip列表 = 表格数据['IP'].tolist()
    账户列表 = 表格数据['账户'].tolist()
    密码列表 = 表格数据['密码'].tolist()
    #telnet执行命令(ip列表, telnet端口,命令列表,账户列表,密码列表)
    return ip列表, 账户列表, 密码列表


 ###########交换机命令批量调用
def cmd_list(cmd_pash):
    # 用 pandas 的 read_csv 方法读取 CSV 文件
    cmd_data = pd.read_csv(cmd_pash)

    # 提取 IP、账户和密码列的数据
    input_cmd = cmd_data['命令'].tolist()
    #telnet执行命令(ip列表, telnet端口,命令列表,账户列表,密码列表)
    return input_cmd



def telnet执行命令(主机, 端口, 命令列表,用户名,密码):
    # 创建 Telnet 对象
    连接 = telnetlib.Telnet(主机, 端口, timeout=2)
    # 登录
    连接.read_until(b'Username:', timeout=2)
    连接.write((用户名 + '\n').encode('ascii'))
    连接.read_until(b'Password:', timeout=2)
    连接.write((密码 + '\n').encode('ascii'))
    # 逐个发送命令
    for 命令 in 命令列表:
        连接.write((命令 + '\n').encode('ascii'))
        time.sleep(0.1)
        # 读取输出,注意:在实际使用中,你可能需要根据命令的特定输出来判断是否需要等待更长的时间
        输出 = 连接.read_until(b'prompt', timeout=1).decode('ascii')
        print(输出)

    # 关闭 Telnet 连接
    连接.close()


###############################################################
# 调用函数并传入 CSV 文件的路径
提取IP账户密码信息(文件路径)
cmd_list(命令表格)

cmd_list1 = cmd_list(命令表格)
ip列表, 账户列表, 密码列表 = 提取IP账户密码信息(文件路径)

# 运行脚本,调用CVS > 提取的值给  telnet函数
for ip, 账户, 密码 in zip(ip列表, 账户列表, 密码列表):
    #print(f'IP: {ip}, 账户: {账户}, 密码: {密码}')
    print(f'开始登录:{ip}')
    telnet执行命令(ip, telnet端口,cmd_list1,账户,密码)
    time.sleep(0.1)

文章来源:https://blog.csdn.net/Connor_xie/article/details/135173388
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。