异常处理的应用
实验目的:
1.可自主修改交换机配置,制造出常态错误;
2.创建 try…except…异常处理的脚本文件 批量登录交换机 且 执行cmd.txt文件的命令;
3.出现常态错误的情况下,使得其交换机依然不受干扰,完成剩余的配置。
实验准备:
1.修改1号交换机的用户密码(conf t):username python password 456;
2.关闭2号交换机的某个端口(例 g0/0)conf t:shutdown;
3.确保 python 的模块 例( paramiko ) 能正常运行。
开始:
1.在VM虚拟机上创建一个 ip.txt 的文件存放交换机的IP(ip.txt)
2.在VM虚拟机上创建一个 cmd.txt 的文件,写入需要在交换机上执行的命令(例:show clock)
3.在VM虚拟机上创建一个 lab3.py 文件,其写入代码如下:
import paramiko
import time
import getpass
import sys
import socket
username = input('Username:')
password = getpass.getpass('password:')
ip_file = sys.argv[1]
cmd_file = sys.argv[2]
switch_with_authentication_issue = []
switch_not_reachable = []
iplist = open(ip_file,'r')
for line in iplist.readlines():
try:
ip = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password,allow_agent=False,look_for_keys=False)
print("You have successfully connect to",ip)
command = ssh_client.invoke_shell()
cmdlist = open(cmd_file,'r')
cmdlist.seek(0)
for line in cmdlist.readlines():
command.send(line + "\n")
time.sleep(2)
cmdlist.close()
output = command.recv(65535)
print(output.decode("ascii"))
except paramiko.ssh_exception.AuthenticationException:
print("User authentication failed for " + ip + ".")
switch_with_authentication_issue.append(ip)
except socket.error:
print(ip + " is not reachable.")
switch_not_reachable.append(ip)
iplist.close()
ssh_client.close
print('\nUser authentication failed for below switches: ')
for i in switch_with_authentication_issue:
print(i)
print('\nBelow switches are not reachable: ')
for i in switch_not_reachable:
print(i)
验证:
VM虚拟机:python3.8 lab3.py ip.txt cmd.txt
至此(完)