通过python的paramiko模块获取cisco交换机的配置

import paramiko
import time
import os
import threading,Queue

class MyExpection(Exception):
    pass

class ThreadPool(object):
    def __init__(self, maxsize):
        self.maxsize = maxsize
        self._q = Queue.Queue(self.maxsize)
        for i in range(self.maxsize):
            self._q.put(threading.Thread)

    def getThread(self):
        return self._q.get()

    def addThread(self):
        self._q.put(threading.Thread)

def show_conf(remote_session,hostname):
    remote_session.send('terminal length 0\n')
    time.sleep(0.1)
    remote_session.send('show run\n')
    time.sleep(1.6)
    buff = remote_session.recv(655350)
    #print(buff)
    file_path = os.path.join(os.path.split(os.path.realpath(__file__))[0],'conf/')
    with open(file_path + str(hostname) + '.conf', 'wb') as f:
        f.write(buff)
    buff =  ''
    remote_session.send('show vlan\n')
    time.sleep(0.2)
    buff = remote_session.recv(655350)
    file_path = os.path.join(os.path.split(os.path.realpath(__file__))[0],'vlan/')
    with open(file_path + str(hostname) + '.vlan', 'wb') as f:
        f.write(buff)
    os.system('sh sedFile.sh %s'%hostname)
    remote_session.send('exit\n')
    print('%s is OK'%hostname)

def ssh(hostname,username,pw,en_pw,pool):
    port = 22
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname, port, username, pw, timeout=5)
        remote_session = client.invoke_shell()
        time.sleep(0.2)
        buff = remote_session.recv(65535).decode()
        if buff.endswith('>'):
            remote_session.send('en\n')
            time.sleep(0.2)
            buff = remote_session.recv(65535).decode()
            if buff.endswith('Password: '):
                remote_session.send('%s\n'%en_pw)
                time.sleep(0.2)
                buff = remote_session.recv(65535).decode()
                if buff.endswith('Password: '):
                    raise MyExpection('`s enable password is incorrect')
                show_conf(remote_session, hostname)
        elif buff.endswith('#'):
            show_conf(remote_session, hostname)
    except MyExpection as e:
        print('%s is %s' % (hostname, e))
    except Exception as e:
        print('%s is %s'%(hostname,e))
    pool.addThread()

if __name__ == '__main__':
    t_list = []
    pool = ThreadPool(5)
    with open('list.txt','r') as f:
        for line in f:
            hostname,username,pw,en_pw  = line.strip().split('\t')
            th = pool.getThread()
            t = th(target=ssh, args=(hostname,username,pw,en_pw,pool))
            t.start()
            t_list.append(t)
    for i in t_list:
        i.join()

  其中在该目录中有conf和vlan的文件夹,并且调用的那个shell如下:主要是为了剪切

#!/bin/bash
#
cd /home/hjc/switch/conf
file1=$1.conf
sed -ni '/Building configuration/,$p' $file1
sed -i '/Building configuration/d' $file1
sed -i '$d' $file1
cd /home/hjc/switch/vlan
file2=$1.vlan
sed -i '/show vlan/d' $file2
sed -i '$d' $file2

  而调用的那个list.txt主要是存放ip、user、password、enable_password,

  写的很烂,但实现了想要的功能,还算比较开心,后面还会改进可以判断登录的是哪一品牌的交换机,然后做出不同的判断和发送的信息。

转载于:https://www.cnblogs.com/hjc4025/p/10137130.html

### 回答1: Python 是一种高级编程语言,可以用于自动化任务,在配置 Cisco 交换机时也可以使用 Python 来批量配置。 首先,我们需要安装必要的 Python 模块,如 Paramiko 和 Netmiko,这些模块可以帮助我们建立 SSH 连接并发送命令。 接下来,我们需要编写 Python 脚本来批量配置 Cisco 交换机。可以将交换机的 IP 地址、用户名和密码等信息存储在一个文件中,然后使用 Python 读取这些信息并建立 SSH 连接。 在连接建立后,我们可以使用 Netmiko 提供的方法来发送配置命令。可以通过编写一个循环来遍历每个交换机配置信息,并在每个交换机上执行特定的命令来对其进行配置。例如,可以使用命令行模式下的 "config terminal" 进入交换机配置模式,然后发送一系列的命令来配置 VLAN、端口、IP 地址等设置。 脚本的最后一步是关闭 SSH 连接,并在操作完成后打印出执行结果。这样,我们就可以通过运行这个 Python 脚本来批量配置多个 Cisco 交换机了。 总的来说,Python 是一种功能强大的编程语言,可以方便地批量配置 Cisco 交换机。通过使用 Paramiko 和 Netmiko 这样的 Python 模块,我们可以实现 SSH 连接和命令发送。这种自动化的方法可以节省时间和精力,并确保交换机的一致性配置。 ### 回答2: Python是一种强大的编程语言,可以用于大规模自动化配置CISCO交换机。使用Python编写一个脚本来批量配置CISCO交换机可以大大提高配置的效率和准确性。 首先,我们需要安装Python的网络设备操作库,如Netmiko,Paramiko或NAPALM。它们使Python能够通过SSH或Telnet与CISCO交换机进行通信并执行命令。 接下来,我们可以通过读取一个文本文件来获取配置CISCO交换机的IP地址、用户名和密码等信息。例如,我们可以将这些信息存储在一个名为"devices.txt"的文本文件中,每行一个设备,包括设备IP地址、用户名和密码。 在脚本中,我们可以使用循环来迭代读取设备信息,并针对每个设备进行配置。 我们可以使用以下代码来连接CISCO交换机并执行配置命令: ``` from netmiko import ConnectHandler # 读取设备信息 with open('devices.txt', 'r') as file: devices = file.readlines() # 迭代配置每个设备 for device in devices: # 拆分设备信息 ip, username, password = device.strip().split(',') # 根据设备类型,创建设备字典 device_dict = { 'device_type': 'cisco_ios', 'ip': ip, 'username': username, 'password': password, } # 连接设备 connection = ConnectHandler(**device_dict) # 执行配置命令 connection.send_config_from_file('cisco_config.txt') # 保存配置更改 connection.save_config() # 断开连接 connection.disconnect() ``` 在上述代码中,我们使用`netmiko`库中的`ConnectHandler`类来连接CISCO交换机。我们首先读取设备信息,然后通过迭代每个设备来连接并执行配置命令。在这个例子中,我简单地从一个名为"cisco_config.txt"的文件中读取配置命令,你可以根据实际需求修改。 通过运行这个脚本,我们可以批量配置CISCO交换机,从而节省时间和精力,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值