实验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。
实验目的
- 配合 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 interface Vlanif1 stelnet server enable user-interface con 0 |
实验前检查
对 L3S1 到 L3S5 逐一进行检查,每台交换机都只有一个默认 VLAN 。
检查 PC 到 L3S1 到 L3S5 的网络连通性,如不通需要排网络。(有时候 ping 前几个包会丢包,这个有可能 L3S们刚启动,生成树需要收敛,之后 arp 表项要建立。)
L3S1 到 L3S5全网 ping 测一遍后,用 arp -a可以查到 arp 表项。
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() |
实验结果检查
好了,代码执行完成回显,部分截屏如下。
刚开始操作的时候会报错
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 脚本的操作。