协程异步 SSH登录网络设备 以思科设备举例(协程 异步回调)

网友投稿 276 2022-09-11


协程异步 SSH登录网络设备 以思科设备举例(协程 异步回调)

之前博文:1.Python netmiko 管理 network devices 2.Python 通过telnet 配置思科网络设备3.Python 通过telnet 备份网络设备的配置

目标:

当登录的设备数量很多时,通过asyncssh异步SSH库来登录设备,可以明显提高效率。

实验环境:

1.网络设备用eve模拟思科的IOS设备 2.python3 3.使用的python库有: a.asyncio b.asyncssh c.sys d.time 4.win10运行代码 5.实验拓扑:

代码如下:

import asyncio import asyncssh import sys import time async def run_client(host_config): # 初始化一个SSH连接 # 如果机器时第一次SSH登录,需要将known_hosts 设置为None,否在会报错 async with asyncssh.connect(host_config.get('host', '127.0.0.1'), port=host_config.get('port', 22), username=host_config.get('username', 'admin'), password=host_config.get('password', 'admin'), known_hosts=host_config.get('known_hosts', None) ) as conn: # 执行SSH命令 result = await conn.run('show run\n', check=True) # 打印SSH命令执行结果 print('----------%s------------' % host_config.get('host')) print(result.stdout, end='') # 需要配置的6台主机信息 host_list = [ {"host": '172.16.1.100', "port": 22, "username": "admin", "password": "admin", "known_hosts": None}, {"host": '172.16.1.101', "port": 22, "username": "admin", "password": "admin", "known_hosts": None}, {"host": '172.16.1.200', "port": 22, "username": "admin", "password": "admin", "known_hosts": None}, {"host": '172.16.1.102', "port": 22, "username": "admin", "password": "admin", "known_hosts": None}, {"host": '172.16.1.103', "port": 22, "username": "admin", "password": "admin", "known_hosts": None}, {"host": '172.16.1.104', "port": 22, "username": "admin", "password": "admin", "known_hosts": None} ] # 放置异步任务对象的列表 tasks = [] # 记录开始时间 start_time = time.time() try: # 启动一个循环事件 loop = asyncio.get_event_loop() # 遍历需要配置的主机列表,创建任务对象 for conf in host_list: tasks.append(loop.create_task(run_client(conf))) # 等待所有的异步任务执行完毕 loop.run_until_complete(asyncio.wait(tasks)) except (OSError, asyncssh.Error) as exc: sys.exit('SSH connection failed: ' + str(exc)) # 记录结束时间 end_time = time.time() # 计算程序执行时间 delta_time = end_time - start_time # 实验的时候,耗时在4.5s左右 # 打印程序执行时间 print(delta_time)

后续写个模块,支持各个厂家的常用操作,进行业务逻辑上更高程度的抽象。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis实体类字段大小写及字段获取不到值问题
下一篇:可实现聊天行为审计的数据防泄漏软件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~