0
点赞
收藏
分享

微信扫一扫

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP

实验2主要在 python paramiko 中配合使用 getpass 模块和 input() 函数,结合 for loop 进行交换机配置

实验拓扑

【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.11.2/24,桥接到云彩,Python所在。

【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。

【SSH 服务端】L3Sx,IP为 192.168.11.1x/24,连接到透明交换机SW1。

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_搜索

实验目的

  • 配合 getpass 模块和 input() 函数实现交互式的 SSH 用户名和密钥输入。
  • 配合 for loop 同时给 5 台交换机配置 VLAN 10 至 20 。

实验环境配置

按照拓扑,每台交换机 vlan 1 都配置 vlanif 的 IP 作为管理。(附 L3S1 的配置,如 L3S2 则仅为将 192.168.11.11 改为 192.168.11.12,这里从简。)

sysname L3SW1

aaa

local-user python password cipher 123
local-user python privilege level 15
local-user python service-type ssh

interface Vlanif1
ip address 192.168.11.11 255.255.255.0

stelnet server enable
ssh authentication-type default password

user-interface con 0
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh

实验前检查

对 L3S1 到 L3S5 逐一进行检查,每台交换机都只有一个默认 VLAN 。

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_搜索_02

检查 PC 到 L3S1 到 L3S5 的网络连通性,如不通需要排网络。(有时候 ping 前几个包会丢包,这个有可能 L3S们刚启动,生成树需要收敛,之后 arp 表项要建立。)

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_python_03

L3S1 到 L3S5全网 ping 测一遍后,用 arp -a可以查到 arp 表项。

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_python_04

Python 代码

代码 

​​@弈心​​

 大神在专栏和书中都逐条做了详细解释,如需要请移步阅读,我将其代码中的思科指令修改成华为指令。


#coding:utf-8

import paramiko

import time

import getpass


username = input("Username: ")

password = getpass.getpass("Password: ")


for i in range(11,16):

   ip = '192.168.11.' + str(i)


   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)

   command = ssh_client.invoke_shell()


   print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')

   print('已经成功登陆交换机 L3S' + str(i-10) + ' ' + ip)

   # 关闭分屏功能

   command.send('screen-length 0 temporary\n')

   # 进入系统视图

   command.send('sys\n')


   for i in range(11,16):

       print('正在创建 VLAN :' + str(i))

       command.send('vlan ' + str(i) + '\n')

       time.sleep(1.5)

       command.send('desc Python_Vlan' + str(i) + '\n')

       time.sleep(1.5)

   command.send('return\n')

   command.send('save\n')

   command.send('Y\n')

   time.sleep(2)

   output = command.recv(65535).decode('ASCII')

   print(output)


ssh_client.close()

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_解决方案_05

实验结果检查

好了,代码执行完成回显,部分截屏如下。

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_搜索_06

刚开始操作的时候会报错 

SyntaxError: Non-UTF-8 code starting with '\xd2' in file ssh_paramiko_hw2.py on line 17, but no encoding declared; see h

解决过程:首先去搜索了一下,得到的结论是这不是普通的ASCII编码字符,与汉字有关,得到报错与python文件的编码方式有关,然后又搜索了一下解决方案,CSDN上的解决方案基本上是添加一句注释:

coding=utf-8

尝试了一下失败了
最后我尝试把文件另存为utf8格式的,程序终于正常运行

之后我们可以去每台 L3S 检查 VLAN 信息,查看是否自动建立好了,来验证 python 脚本的操作。

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_解决方案_07

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_解决方案_08

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_搜索_09

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_解决方案_10

网络工程师的Python之路-paramiko实验2,遍历循环,ENSP_解决方案_11

举报

相关推荐

网络工程师的悲哀

0 条评论