拓扑搭建:

python 交换机 执行sys python交换机ssh巡检_python

环境搭建:

注意这里的云连接的是19.1这个网段,所以交换机SW1也要配置到同一个网段

python 交换机 执行sys python交换机ssh巡检_网络_02

sw1:

配置IP,划分vlan:

[sw1]vl 100

[sw1]int vlan 100

[sw1-Vlanif100]ip add 192.168.19.10 24

[sw1]int g0/0/1
[sw1-GigabitEthernet0/0/1]po li ac
[sw1-GigabitEthernet0/0/1]po de vl 100

交换机部署ssh:

[sw1]stelnet server enable         # 启动ssh服务的远程登录功能

[sw1]ssh user zhangxiong         # 新建SSH用户

[sw1]ssh user zhangxiong authentication-type password        # 配置ssh用户密码认证方式

[sw1]ssh user zhangxiong service-type stelnet        # 配置ssh用户的服务方式为远程登录

# 开放 vty 端口,能被远程登录

# 开放 编号为 0 1 2 3 4 的 vty端口,同时支持五个远程用户连接

# 认证模式为 aaa---> authentication 认证(谁能登录进来)
#                          ---> authorizathon  授权(谁进来能干什么)
#                          ---> according 审计(谁进来干了什么)

[sw1]user-interface vty 0 4

[sw1]authentication-mode aaa

[sw1]protocol inbound ssh        # 登入协议为ssh


 # 三A认证配置
[sw1]aaa
[sw1-aaa]local-user zhangxiong password cipher huawei@123     # 配置本地账号的登录口令
[sw1-aaa]local-user zhangxiong privilege level 15        # 配置账号登录后的管理级别,15最高
[sw1-aaa]local-user zhangxiong service-type ssh        # 配置本地用户的接入类型

这时基础配置就完成了,主要是在sw1上开启了ssh服务并配置了账号和密码验证,然后配置远程登录,从而可以实现用python进行连接sw1。接下来开始正题:

python代码解析:

# display current-configuration  查看当前的配置
# display saved-configuration    # 查看当前保存的配置
# display current-configuration | include ip route  筛选配置过的ip route命令

import paramiko
import time

# 创造一个 SSH 客户端
ssh_client = paramiko.SSHClient()    # 创建一个ssh客户端对象
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
"""
AutoAddPolicy:自动添加主机名以及主机秘钥
set_missing_host_key_policy:一个连接主机的策略(没有本地主机秘钥或者HostKeys对象时)
"""
ssh_client.connect(hostname='192.168.19.10', username='zhangxiong', password='huawei@123')    
# 连接sw1,用户名密码为sw1中远程登录设置的

command = ssh_client.invoke_shell()    
# 打开连接到的终端,使用ssh shell通道,相当于使用ssh远程到了sw1

# 给设备 发送命令
"""
send发送内容,然后将字符串进行编码,以便让计算机认识
"""
command.send("sys\n".encode())    # 进入系统视图,\n表示在终端执行回车操作
command.send("user-interface vty 0 4\n".encode())    
command.send("screen-length 0\n".encode())
"""
这里这样配置是因为执行dis cu 后会显示不完整,只会显示默认的24行,然后需要我们自己
去按回车或者空格,才能进行翻页,会导致我们在python中回显只能看到前面24行。
这里是进入了远程登录视图,设置了荧幕长度为0,0表示显示所有行
"""

command.send("dis cu\n".encode())    # 发送dis cu 命令并编码
time.sleep(3)    # 需要进行睡眠,以便让下一条接收响应的命令能够有时间回显
recv = command.recv(65535).decode()    # recv接收响应,字节为65535,并进行解码

result = recv.splitlines()
# result现在是一个列表,存放了回显的命令,每个命令是一个元素
"""
splitlines:splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表
这样做是因为在保存文件后发现每行命令后多出一行空行
"""

print(recv)    

# 将回显内容保存到本地
with open("sw1.txt", 'w') as back:
    for item in result:    
        print(item)
        back.write(item+"\n")

ssh_client.close()

执行完成后在脚本本地会多出一个sw1.txt的文件存放了dis cu后回显的内容