运维少年系列 - python and cisco(2)

骚年 运维少年

运维少年系列 - python and cisco(2)

一、任务概述

假设网络有多台可管理的二层交换机,现在需要在每台交换机上创建10个VLAN,在没有CDP的情况下,如何使用python完成?(别忘了python几乎适用于所有支持远程登录的设备)

二、实现步骤说明

1) 先决条件

首先准备的还是和上篇文章一样,交换机需要开启SSH和配置IP,请将所有设备登录的用户名和密码配置一致。

2) 拓扑图

3) 如何实现多IP

如果网络中有台设备,那么每台设备的IP地址都是不一样的(这是废话),我们如何去逐个登录多台设备然后执行命令呢?

在python中,如果是连续的地址,那么我们可以使用for循环实现逐个登录设备的功能,比如

[root@yunwei cisco]# cat for.py for i in range(1,10):    print '192.168.108.%s' %i[root@yunwei cisco]# [root@yunwei cisco]# python for.py 192.168.108.1192.168.108.2192.168.108.3192.168.108.4192.168.108.5192.168.108.6192.168.108.7192.168.108.8192.168.108.9

但是,如果IP不是连续的怎么办呢?那么在python中我们可以将所有的IP写入一个文件,然后使用for循环去逐行循环该文件,实现登录。如

[root@yunwei cisco]# cat IP.txt 192.168.108.252192.168.108.253[root@yunwei cisco]# [root@yunwei cisco]# cat for.py ip = file('IP.txt','rb')  # 以只读的形式打开文件for i in ip.xreadlines(): # 逐行读取文件中的内容    print i,[root@yunwei cisco]# [root@yunwei cisco]# python for.py 192.168.108.252192.168.108.253[root@yunwei cisco]#

4) 如何实现多命令

如何一次性执行多个文件?我们可以像上次那样使用多次send函数,但很显然,这样效率太低了。我们可以将命令写道一个文件中,使用for循环对文件进行逐行读取,然后执行。如

[root@yunwei cisco]# cat command.txt conf t vlan 10name V10vlan 20name V20vlan 30name V30vlan 40name V40vlan 50name V50vlan 60name V60vlan 70name V70vlan 80name V80vlan 90name V90vlan 100name V100exitint e0/0switchport trunk encapsulation dot1qswitchport mode trunkendshow vlan show int trunk[root@yunwei cisco]# [root@yunwei cisco]# cat for.py cmd = file('command.txt','rb')for i in cmd.xreadlines():    print i,[root@yunwei cisco]# 

最终脚本

这里做个简单的注释,详细注释请参考第一篇文章。

import paramiko # 导入模块import timeuser = 'yunwsn' # 定义登录用户名passwd = '123456' # 定义登录密码s = paramiko.SSHClient() # 实例化s.set_missing_host_key_policy(paramiko.AutoAddPolicy())IP = file('IP.txt','rb') # 打开IP文件for ip in IP.xreadlines(): # 循环IP文件    s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)      # 登录读取到的IP文件行    print '[ \033[0;32m success\033[0m ] login %s ' %ip  # 打印登录成功信息    cmd = s.invoke_shell()     # 交互式sshell    command = file('command.txt','rb') # 因为上面已经登录成功,这里打开命令文件    for command in command.xreadlines(): # 逐行读取命令        cmd.send(command)  # 执行命令        time.sleep(0.1)        output = cmd.recv(65535) # 每执行一个命令就打印一次        print output    cmd.close() # 一个IP命令执行完毕,关闭交互式shell,循环下一个ipIP.close() # 全部Ip执行完成,则关闭IP文件

效果如下(动图)


登录交换机查看结果

©著作权归作者所有:来自51CTO博客作者mb5ffd6f0f39006的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 运维少年系列 python and cisco (1)
  2. wordpress登录失败处理user-lock插件安装
  3. MySQL系列-用户管理
  4. 由于Linux系统文件同步时突然断电导致系统进入none模式问题详解
  5. 查看域用户最后登录时间的方法
  6. 运算符、流程控制、循环与文件包含
  7. 使用supervisor 管理logstash
  8. jenkins打包文件上传七牛云
  9. 第16章 0303-门面模式与Composer,(composer中自动加载的实现)

随机推荐

  1. JAVA-初步认识-第十章-对象的初始化过程
  2. 如何同时执行这些多方法调用?
  3. 在tomcat服务器中部署war文件
  4. Android:以编程方式设置textview的一个填
  5. 2017-2018-1 JAVA实验站 第三周作业
  6. 为什么Spring的JDBC模板不使用表的默认值
  7. Spring 3.0将文件注入资源
  8. 2009年1月19日,欢迎PyLucene加入Lucene子
  9. 测试技术大牛谈成长经历:一个好的软件测试
  10. Javascript 检查字符串是否是数字的几种