利用python,2分钟完成1000台路由器的配置或备份

2023-11-08

 0.

实现要求:

通过2个简单的脚本,检测任意网段中ssh可达的设备并链接。

同时对所有设备写入任意华为命令脚本。并记录设备回显的所有内容(如1000台设备 'dis cu'显示结果)

 1.

实验准备

此处主要是华为的设备,模拟器使用ensp,4台路由器配置同网段地址来模拟ssh环境,配置好接口地址,

确保能ping通真机环境,这是第一步的关键。

接来下来配置ensp 的ssh,开启ssh功能,配置user账号名称huawe密码123,其中AR4的密码配置为456,可以参考如下脚本

注意修改名称,修改ip地址,AR4的local-user 密码 ,其他相同

sys

sys  R1

int  g 0/0/0  

ip add  169.254.18.1  24

q

stelnet server enable

user-interface vty 0 4

protocol inbound all

authentication-mode aaa

aaa

local-user huawei password cipher 123

local-user huawei privilege level 3

local-user huawei service-type ssh

ssh user  huawei  authentication-type  all

尝试ssh到ensp路由器的AR1

 可以看到是ssh链接到了AR1上,实验的准备环节到此结束。

 2.

选择网段进行ip地址扫描,确定可达的设备ip地址,并记录在文件夹中。

此步骤的原因是:如果现网环境中,你管理着几百上千台设备时,你并不清楚哪些设备是可达的,用一个简单的py脚本ping测试一下,

这里使用的是最新版的python和pycharm,都是可以在官网免费下载的,这里就不做赘述。

确保cmd中可以进入py,

这里用到的需要导入的模块都可以在pycharm中下载。

简单解释一下这个代码的逻辑。

导入的是2个模块 一个是pythonping,可以简单的理解为ping的一个模块,另外一个是os,可以和操作系统进行互动。

因为后面会把可以ping通的ip地址记录在一个txt文本中,我命名为reachable_ip.txt ,做了一个简单的if语句,

如果文件夹中存在这个txt的话就删除,这样可以保证这个文件是最新的。

ip地址分为4段,这里用嵌套for循环来遍历多个网段中的所有设备,

因为我这里用的是回环网卡桥接,所以地址是169.254开头,你们按照自己的地址进行更改,

图里的会扫描的地址段为,169.254.18中的1-15,如果需要扫描多个网段就修改ip_3的数值,把ip_4修改成(1,255)

可以看见现在script中是没有reachable_ip.txt这个文件的,来运行一下py1看看结果。

没有问题,多了可达ip的txt文件,里面的4个ip地址对应的4台ensp中的路由器。

这里特别说明一点

这里导入的pythonping默认超时时间为2秒,尝试等待次数为4次,这样导致ping一个不通的地址需要8秒,

如果网段很多的话就会很慢,可以按住ctrl,把超时时间timeout=0.1秒,等待次数count=2。偶尔检测不出来的话超时时间设置大一些。

 3,

利用paramiko链接到设备,执行command.txt中的华为设备命令,并生成一个txt来记录设备回显的所有内容,同时加入try  except来跳过有问题的设备

在之前AR4中我们把密码设置成了456,现网环境中也会存在这个问题,设备数量过多的情况下会存在某些设备ssh配置不通或者密码错误的情况,

这时候如果不跳过的话就会中断脚本进程。

简单说明一下 time和datatime是用来生成回显文件的时候记录时间,socket是ssh出错时except的判断依据,

getpass可以引导输入密码时不显示明文。

这里建立2个空列表,分别用来记录ip出问题的设备,和ssh密码不正确的设备,因为py1脚本中测试了ip可达性,所以等等我会在txt中加入一条不可达的ip地址。

这一段是paramiko链接的代码,橘色的hostname是py1脚本reachable_ip.txt中的ip地址,在for循环下 txt中有几个ip地址就会链接几次。

username是上面input函数引导用户输入的账号,这里我们是huawei,password是上面getpass引导输入的密码,这里是123。

登录成功后打印出 "成功登录" 加上ip  来显示进度。

注意这里是用了sys.argv[1]来代替华为命令的txt文本名称,也就是文件夹中的command.txt , 需要在cmd运行脚本后跟上这个文本名称,这样做的目的是提升可扩展性。

如果你想运行别的命令脚本,就可以这么写:py   2.py  ospf.txt , 当然我们这里是py  2.py  command.txt。  这个txt的位置就等于sys.argv[1]

sleeep(3) 的作用是让其写入华为命令时等待3秒让交换机路由器有个反应时间,不会遗漏命令。

这里写入设备回显内容时open(),用的是w覆写,所以同天运行的脚本生成的txt都是最新的,日期不同时会生成新日期的txt文件。

注意输出内容时改成'ascii',不然显示内容很乱看不清。

继续

这里一定要注意层级,python的代码缩进很严格,不同的位置也代表着代码作用域不同,

except一定是和try个层级的,并一定属于ip地址for循环下,

这里遇到2种无法连接的情况下选择跳过,并打印出来,加入到上面创建的2个err空列表中。

最后在for循环结束后统一显示。

这是command.txt的配置内容。可以自行修改成想要的,比如统一修改所有或者某个网段所有设备的ip地址,vlan,ospf等等等等,总之是任何你需要的命令没有限制。

这里要注意。dis cu往往有大量的内容,正常情况下一次只显示24条内容。需要不停的去空格来显示,

进入到user-interface vty 0中 这个0是值第一个ssh登录设备的用户,也可能不是0 看具体情况,用 dis user-interface vty  0 来验证,

如果当前有用户登录的话前面有个'+'号,

screen-length 0  temporary 简单理解为一次性显示所有内容不需要再按空格,不然回显内容是不完整的,python无法写入到txt中。

4,

验证,让我们来运行一下py2看看结果。

这里我在reachable_ip.txt中再加入一条不可达的地址1.1.1.1 来测试一下py2脚本代码鲁棒性。

 

这里注意一定要跟上命令脚本名称,不然代码是无法运行的。

 

输入账号huawei,密码123

 

可以看到记录出了1.1.1.1 不可达的信息,同时提示了AR4的密码不正确,因为我们配置的密码是456

文件夹中多个3个txt带有ip地址和日期,文件内容为dis cu的回显内容。

 

 5.

总结,至此为止实验全部结束,其中用设计的python代码思路都很基础,我认为如果是网工方向的话足以,并不需要学到十分高明的开发方法,也不需要考虑到性能等等,

后续也可以用多线程来提高运行速度,这都是后话,有兴趣大家可以自行研究。当然还有linux系统的shell脚本也可以实现类似效果但是没有python好用,毕竟这么多模块在这呢。其中遇到的所有问题都可以百度解决(亲测)。

最后一图附上py2代码,提供参考。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用python,2分钟完成1000台路由器的配置或备份 的相关文章

随机推荐