运维少年系列 - python and cisco(2)
16lz
2021-03-12
运维少年系列 - 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文件
效果如下(动图)
登录交换机查看结果
更多相关文章
- 运维少年系列 python and cisco (1)
- wordpress登录失败处理user-lock插件安装
- MySQL系列-用户管理
- 由于Linux系统文件同步时突然断电导致系统进入none模式问题详解
- 查看域用户最后登录时间的方法
- 运算符、流程控制、循环与文件包含
- 使用supervisor 管理logstash
- jenkins打包文件上传七牛云
- 第16章 0303-门面模式与Composer,(composer中自动加载的实现)