最近在学习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.pypip install paramiko

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


#!/usr/bin/env python
import paramiko

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

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

# -*- coding: utf-8 -*-
import ciscolibdef 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))continueexcept Exception as e:print("Couldn't connect to %s: %s" % (ip, str(e)))continueswitch.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 socketusername = 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 "你已经成功连接到: ", ipcommand = 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 outputexcept 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.closeprint '\n 以下交换机认证失败:'
for i in switch_with_authentication_issue:print i
print '\n 以下交换机网络不可达:'
for i in switch_not_reachable:print i

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

执行结果 :

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

  1. 什么是自动化运维?为什么选择Python做自动化运维?

    "Python自动化运维"这个词,想必大家都听说过,但是很多人对它并不了解,也不知道是做什么的,那么你对Python自动化运维了解多少呢?跟着蛋糕往下看. 什么是Python自动化 ...

  2. Python在网络运维中的应用与分析

    目前Python是新兴技术编程语言的主流之一,随着互联网技术的不断发展,计算机网络的应用范围也随之增加,网络运维自动化和智能化需求越来越高,Python编程语言逐渐盛行,该程序设计语言简单灵活,拥有庞 ...

  3. python开发web运维工具_【实战小项目】python开发自动化运维工具--批量操作主机...

    有很多开源自动化运维工具都很好用如ansible/salt stack等,完全不用重复造轮子.只不过,很多运维同学学习Python之后,苦于没小项目训练,本篇演示用Python写一个批量操作主机的工具 ...

  4. python cmdb_python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  5. python实现自动化运维项目_Python自动化运维项目开发最佳实战

    下载地址:五号服务器---VIP资料下载七区\VIP专题教程二区 游客,如果您要查看本帖隐藏内容请回复 Python 自动化运维项目开发最佳实战 这个远比什么老男孩的python好的多 2017-1- ...

  6. 2011系统架构师大会分享-自动化运维中的关系管理

    问过一些技术方向的朋友,在他们眼中运维是做怎么样的事情?其中大部份人回答说:搬机器.装系统.收报警.写各种各样维护清理的shell脚本等等.运维真的只是做这些事情? 不同的公司.不同规模的集群,运维所 ...

  7. 基于python技术的自动化运维是干嘛的_如何理解Python与自动化运维的关系。?

    一个是目的,一个是工具的关系 为了达到某个目的(比如这里的运维自动化),我们可以用不同的手段或者工具(比如这里的python) 如果你特别擅长Java.PHP,也可以用Java\PHP来开发相关运维自 ...

  8. ansible(自动化运维中)——ansible常用模块

    shell模块 #帮助 ansible-doc shell #获取主机名 ansible webserver -m shell -a 'hostname' -o #指定线程数(默认线程数是5) ans ...

  9. 自动化运维之 部署Saltstack 并批量部署 Nginx

    Saltstack 原理 Saltstack由Master和Minion构成,master是服务端,表示一台服务器:minion是客户服务端,表示多台服务器.在Master 上发送命令给符合条件的 M ...

最新文章

  1. sqlyog.err文件可以删掉吗_苹果备忘录删掉的东西可以找回来吗?可以恢复被删内容的便签备忘录软件...
  2. 兴趣点推荐代码_推荐系统模型阿里用户兴趣模型(附完整代码)
  3. 技嘉主板GA-B85M-D3V PLUS 1150组装问题汇总
  4. 在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)
  5. char *c = abc和char c[]=abc
  6. java中对map使用entrySet循环
  7. ajax传递数组:属性traditional设置
  8. ZetCode JavaScript 教程
  9. 关于Cascading
  10. yolo系列算法思想流程简单讲解概述————(究极简单的讲述和理解)
  11. java中flush()的作用的是什么?与close有什么联系
  12. Python Numpy random.chisquare() 卡方分布
  13. vue3—reactive如何更改属性
  14. 转;三宫九观二十四坊——摘自苏州热线
  15. Python数据分析高薪实战第十二天 网络服务用户流失预测分析和国产电视剧评分预测分析
  16. 计算机网络-传输层(传输层概述,TCP,UDP协议概述)
  17. 【学术相关】一般的博士生毕业能进什么样的大学当老师?网友真实回复……...
  18. 全国大学生软件测试大赛移动应用测试脚本编写案例Demo
  19. 苹果手机清灰_手机清灰音频
  20. ios调用百度地图智能联想搜索

热门文章

  1. 镁客网M-TECH AI助力中国智造产业论坛即将开启,这些大咖在深圳等你
  2. C语言中static关键字和break/continue在for/while循环中的作用
  3. 《代码精进之路》第一章:命名 读书笔记
  4. 如何用搭建私人视频网站?
  5. RPA Uipath学习心得
  6. pthread_mutex_timedlock
  7. mysql凡人入门_SQL入门学习
  8. 带你深入理解传递参数
  9. exchange 2010英文版的安装前骤及步骤
  10. 甲骨文里的十二生肖这么写