批量更改华为交换机配置 by Python

模拟场景和需求:

有100台华为的S5700交换机已经在正常运作,通过SSH连接,用户名和密码一致。由于业务需要,统一更改部分接口的配置。

目录结构:

set_commands.py  # 执行文件

cmds.txt  # 需要更改的配置命令

注意事项:

需要netmiko模块,可以通过 "pip install netmiko" 来安装

文件内容:

set_commands.py 内容如下:

from netmiko import ConnectHandler
from netmiko.ssh_exception import  NetMikoAuthenticationException, NetMikoTimeoutException
import threading
import datetime
import queue
import re, os

def conn_info(ip):
    dev = {
        'device_type': 'huawei',
        'host': ip,
        'username':'{username}',
        'password': '{password}',
    }
    return dev

def conn_dev(dev_q):
    while not dev_q.empty():  #读取队列获得每一台交换机的IP
        dev_ip = dev_q.get()
        try:
            dev_conn = ConnectHandler(**conn_info(dev_ip))
            print("[%s] Connected." % dev_ip)

            dev_conn.send_config_from_file('cmds.txt')  #将写好的命令行逐条写入交换机

            output = dev_conn.send_command_timing('save')  #保存已更改的配置
            if "Y/N" in output:
                dev_conn.send_command_timing('y')

            dev_conn.disconnect()
            print('[%s] done.' % dev_ip)

        except NetMikoAuthenticationException:
            print("[%s] Error! Please check username or password ..." % dev_ip)
        except NetMikoTimeoutException:
            print("[%s] Error! Connect time out ..." % dev_ip)
        except Exception as e:
            print('[%s] Error:%s' % (dev_ip, e))



if __name__ == "__main__":
    #交换机的IP地址列表,也可以读取文件(txt/excel/...)来获取
    devs_ip = ['192.168.1.1', {......}, '192.168.1.100']
    
    devs_q = queue.Queue()
    for dev in devs_ip:
        devs_q.put(dev)

    max_conn = 15 # 同时操作交换机数量(可增加或减少)
    
    ts = []  # 线程集合
    for i in range(max_conn):
        t = threading.Thread(target=conn_dev, args=(devs_q,))
        t.start()
        ts.append(t)
    for t in ts:
        t.join()

    print("Done.")

cmd.txt 内容如下:

int g 0/0/1
port link-type access
port default vlan 10
quit
int g 0/0/3
shutdown
quit
int g 0/0/10
port default vlan 20
quit

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python是一种高级编程语言,它被广泛应用于各种领域,包括网络编程。如果你想批量修改华为交换机的用户名和密码,可以使用Python来实现。 首先,你需要安装Python的paramiko库,它是一个用于SSH连接和执行命令的库。你可以使用pip命令来安装paramiko库: ``` pip install paramiko ``` 接下来,你可以使用以下代码示例来批量修改华为交换机的用户名和密码: ```python import paramiko def change_credentials(ip, username, password, new_username, new_password): # 创建SSH客户端对象 client = paramiko.SSHClient() # 自动添加主机密钥 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接SSH服务器 client.connect(ip, username=username, password=password) # 执行命令修改用户名和密码 stdin, stdout, stderr = client.exec_command(f"system-view\nuser-interface vty 0 4\nauthentication-mode aaa\nuser privilege level 3\nuser {new_username} password irreversible-cipher {new_password}\nsave\nquit") # 打印命令执行结果 print(stdout.read().decode()) except Exception as e: print(f"连接失败:{str(e)}") finally: # 关闭SSH连接 client.close() # 修改单个交换机的用户名和密码示例 change_credentials("192.168.1.1", "admin", "old_password", "new_username", "new_password") # 修改多个交换机的用户名和密码示例 switches = [ {"ip": "192.168.1.1", "username": "admin", "password": "old_password"}, {"ip": "192.168.1.2", "username": "admin", "password": "old_password"}, # 添加更多交换机信息 ] for switch in switches: change_credentials(switch["ip"], switch["username"], switch["password"], "new_username", "new_password") ``` 请注意,上述代码仅供参考,你需要根据实际情况进行修改。确保你已经正确配置交换机的SSH连接,并且在执行代码之前备份了交换机配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值