Python在自动化运维中的应用之批量配置交换机

最近在学习Python语言,想着通过一些实际应用来学习可以回事理解,所以想到批量配置管理企业内部的思科交换机。

python是一门解释性语言比较高级有很多的基础库和第三方开发库,现在开发环境也比较热门。

环境:centos7客户端 + 思科cisco交换机

目的:批量管理配置交换机,先将所有交换机通过telnet开启配置ssh,而后通过ssh方式远程批量管理交换机.【遇到故障交换机跳过执行下面配置】

1. 怎么安装python环境这里就说了,这里是基于python2.7.5开发的,安装好python后还需要安装可以配置交换机基础库paramiko, 这个模块可以与很多类型的交换机连接。

安装方式:

1. 先安装pip,再安装paramiko库

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py

pip install paramiko

2. 安装好之后可以在项目里面通过import paramiko来引用这个库接口


#!/usr/bin/env python
import paramiko

3.通过项目实例来实现批量配置思科交换机:

先通过ciscolib库方式来配置交换机:这里是通过文件来管理交换机的IP地址。

# -*- coding: utf-8 -*-
import ciscolib

def main():
    PASSWORD="wfweb2kd"
    USERNAME="root"
    ENABLE_PWD="c#andphp"

    for ip in open('sw2960.txt').readlines():
        ip = ip.strip()

        if USERNAME != "":
            switch = ciscolib.Device(ip, PASSWORD, USERNAME, ENABLE_PWD)
        else:
            switch = ciscolib.Device(ip, PASSWORD, enable_password=ENABLE_PWD)

        try:
            switch.connect()
            print("Logged into %s,Successful" % ip)
        except ciscolib.AuthenticationError as e:
            print("Couldn't connect to %s: %s" % (ip, e.value))
            continue
        except Exception as e:
            print("Couldn't connect to %s: %s" % (ip, str(e)))
            continue

        switch.enable(ENABLE_PWD)
        switch.cmd("clock set 18:42:30 22 Apr 2019")
        switch.cmd("conf t")
        switch.cmd("service password-encryption")
        switch.cmd("username admin secret admin123") #//这里只是测试,实际环境不要这样
        switch.cmd("line vty 0 4")
        switch.cmd("login local")
        switch.cmd("crypto key generate rsa") 
        switch.cmd("\n") 
        #//这里只是测试最好是一条一条测试好了再上批量,这里踩了一个坑。
        switch.cmd("end")
        switch.cmd("wri mem")
        switch.disconnect()

if __name__ == '__main__':
    main()

4.配置成功之后可以通过ssh方式来连接配置,上面配置目的是启动交换机的 ssh加密连接22,但是这里也要注意有些交换机是没有ssh模块的也就是没有的。

[sw2960#]crypto key generate rsa

5.配置ssh来配置交换机:

#!/usr/bin/env python
import paramiko
import time
import getpass
import sys
import socket

username = raw_input("用户名:")
password = getpass.getpass("密码:")
ip_file = sys.argv[1]
cmd_file = sys.argv[2]

switch_with_authentication_issue = []
switch_not_reachable = []

f = open(ip_file,'r')
for line in f.readlines():
   try:
        ip = line.strip()
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=False)
        print "你已经成功连接到: ", ip
        command = ssh_client.invoke_shell()
        cmdlist = open(cmd_file,'r')
        cmdlist.seek(0)
        for line in cmdlist.readlines():
                command.send(line + "\n")
        time.sleep(2)
        cmdlist.close()
        output = command.recv(65535)
        print output
   except paramiko.ssh_exception.AuthenticationException:
        print "用户认证失败的" + ip + "."
        switch_with_authentication_issue.append(ip)
   except socket.error:
        print ip + "不可达,请检查网络."
        switch_not_reachable.append(ip)
f.close()
ssh_client.close

print '\n 以下交换机认证失败:'
for i in switch_with_authentication_issue:
        print i
print '\n 以下交换机网络不可达:'
for i in switch_not_reachable:
        print i

下面贴出来,IP文件和命令文件写法:

Python在自动化运维中的应用之批量配置交换机_第1张图片

执行结果 :

Python在自动化运维中的应用之批量配置交换机_第2张图片

你可能感兴趣的:(交换机,Python)