Python实现网络自动化eNSP

作者:text1.txt 时间:2021-01-18 00:48:04 

1.使用Paramiko登陆到单台交换机

实验拓扑

云彩桥接到本机环回接口:192.168.1.1/24
三层交换机IP:192.168.1.2/24

Python实现网络自动化eNSP

实验要求

使用Python Paramiko 模块实现SSH 登录单个交换机(192.168.56.2/24),配置LoopBack0地址:1.1.1.1/32。配置完成后,保存退出。

实验步骤 配置交换机管理地址,并测试与主机虚拟网卡连通性


[Huawei]vlan 10
[Huawei]int vlan 10
[Huawei-Vlanif10]ip add 192.168.1.2 24
[Huawei-GigabitEthernet0/0/1]port link-type access
[Huawei-GigabitEthernet0/0/1]port default vlan 10

Python实现网络自动化eNSP

Python实现网络自动化eNSP

配置三层交换机开启 SSH 服务端,配置 SSH 账号密码。


[Huawei]user-interface vty 0 4
[Huawei-ui-vty0-4]authentication-mode aaa
[Huawei-ui-vty0-4]protocol inbound ssh
[Huawei-aaa]local-user python password cipher 123
[Huawei-aaa]local-user python privilege level 3
[Huawei-aaa]local-user python service-type ssh
[Huawei]stelnet server enable
[Huawei]ssh authentication-type default password

Python代码


import paramiko
import time

ip = '192.168.56.2'
username = 'python'
password = '123'

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) //默认情况下,Paramiko会拒绝任何未知的SSH public keys,使用此函数使其接收来自交换机提供的public keys。
ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)
print('Successfully connect to ' + ip)

commend = ssh_client.invoke_shell()
commend.send('sys\n')
commend.send('interface LoopBack 0\n')
commend.send('ip add 1.1.1.1 255.255.255.255\n')
commend.send('return\n')
commend.send('save\n')
commend.send('y\n')

time.sleep(3) //稍等3秒,然后执行以下操作
output = commend.recv(65535) //截取本次运行script后的所有输出记录,将其assign给output变量
print(output.decode("ascii"))

ssh_client.close()

查看运行结果

Python实现网络自动化eNSP

在交换机上查看

Python实现网络自动化eNSP

也可以在交换机上debuggiing ip packet可以看到日志

2.使用Paramiko登陆到连续子网交换机

实验拓扑

连续子网三层交换机:管理地址 192.168.1.2/24 to 192.168.1.5/24

Python实现网络自动化eNSP

实验要求

登陆到各台交换机,并为其配置vlan 11 to 15,保存配置并退出。

实验步骤

配置管理口IP地址,并配置SSH Server 登陆名以及密码等

python代码


import paramiko
import time

#import getpass
#username = input('Username: ')
#password = getpass.getpass('Password: ') //pycharm中该模块运行没反应,用户名和密码还是直接写的

username = 'python'
password = '123'

for i in range(2, 6):
   ip = '192.168.1.' + 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('Successfully connect to ' + ip)
   command.send('sys\n')
   for j in range(11, 16):
       print('正在创建VLAN: ' + str(j))
       command.send('vlan ' + str(j) + '\n')
       time.sleep(1)
   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实现网络自动化eNSP

Python实现网络自动化eNSP

3.Paramiko登陆不连续子网交换机

实验拓扑

将交换机LSW5的管理接口ip更改为192.168.1.6/24,使交换机ip不在同一网段

Python实现网络自动化eNSP

实验要求

使用Paramiko登 * 台ip不连续的交换机,并给其配置vlan11 to 15

实验步骤

创建一个文本文档,将需要配置的交换机的ip地址写入,这里我在Desktop下创建了一个名为ip.txt文档

Python实现网络自动化eNSP

使用open函数,打开文件,进行操作,实现不连续子网调用


import paramiko
import time

username = 'python'
password = '123'

f = open('C:/Users/DELL/Desktop/ip.txt', 'r')
for line in f.readlines():
   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)
   print('Successfully connect to ', ip)
   command = ssh_client.invoke_shell()
   command.send('sys\n')
   command.send('vlan batch 11 to 15\n')
   time.sleep(2)
   command.send('return\n')
   command.send('save\n')
   command.send('y\n')
   time.sleep(2)
   output = command.recv(65535).decode('ascii')
   print(output)

f.close()
ssh_client.close()

查看运行结果

Python实现网络自动化eNSP

Python实现网络自动化eNSP

Python实现网络自动化eNSP

4.sys.argv[ ] 实现灵活调用脚本所需文件

实验拓扑

假设1.2和1.3为一组,1.4和1.6为一组

Python实现网络自动化eNSP

实验要求

同时修改不同型号设备的配置,给SW1/3配置vlan11 to 15,SW4/5配置vlan16 to 20

实验步骤

创建两个名为ip1.txt,command1.txt的文件,存储1组的ip和要进行的配置

Python实现网络自动化eNSP

同样创建两个名为ip2.txt,command2.txt文件,存储2组的ip和要进行的配置

Python实现网络自动化eNSP

Python实现网络自动化eNSP

python代码


import paramiko
import time
import sys

username = 'python'
password = '123'

ip_file = sys.argv[1]
cmd_file = sys.argv[2]

iplist = open(ip_file)
for line in iplist.readlines():
   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)
   print('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(5)
   cmdlist.close()
   output = command.recv(65535)
   print(output)

iplist.close()
ssh_client.close()

查看运行结果(pycharm不可以使用argv,在cmd里使用)

Python实现网络自动化eNSP

5.SSH连接失败处理


import paramiko
import time
import sys
import socket
import getpass

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,look_for_keys=False)
       print('Successfully connect to ' + ip)
       command = ssh_client.invoke_shell()
       cmdlist = open(cmd_file, 'r')
       cmdlist.seek(0)
       for cmd in cmdlist.readlines():
           command.send(cmd + '\n')
       time.sleep(1)
       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 TimeoutError:
       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 switchs are not reachable: ')
for i in  switch_not_reachable:
   print(i)

来源:https://blog.csdn.net/weixin_51045259/article/details/115100759

标签:Python,网络自动化
0
投稿

猜你喜欢

  • 如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱

    2022-07-03 20:51:47
  • Python使用百度翻译开发平台实现英文翻译为中文功能示例

    2021-10-22 14:56:27
  • Python的语法基础你真的了解吗

    2021-02-23 22:15:11
  • 利用python做数据拟合详情

    2023-04-22 15:32:17
  • MySQL数据入库时特殊字符处理详解

    2024-01-13 01:36:09
  • ES6的循环与可迭代对象示例详解

    2024-05-02 17:25:22
  • 举例讲解Python中的死锁、可重入锁和互斥锁

    2023-12-21 07:35:03
  • 详解Vue开发网站seo优化方法

    2024-04-10 13:47:53
  • 对tensorflow中cifar-10文档的Read操作详解

    2022-08-10 06:59:10
  • python pandas query的使用方法

    2023-01-14 06:23:33
  • vue实现动态路由详细

    2024-05-05 09:25:19
  • python如何实时获取tcpdump输出

    2021-05-05 14:41:36
  • Python实现的简单线性回归算法实例分析

    2021-06-05 17:16:12
  • VB应用程序访问SQL Server的常用方法

    2009-01-21 14:28:00
  • 用Mimer Validator检查SQL查询

    2024-01-24 17:12:01
  • numpy中np.c_和np.r_的用法解析

    2021-02-09 17:54:06
  • 汉明码编码原理及校验方法分析

    2022-10-09 06:38:13
  • vue中插件和组件的区别点及用法总结

    2024-05-09 09:30:07
  • 如何实现My SQL中的用户的管理问题

    2008-12-03 13:56:00
  • asp如何随机显示网站链接?

    2010-06-07 20:40:00
  • asp之家 网络编程 m.aspxhome.com