当前位置:   article > 正文

使用python连接eNSP中交换机并添加配置_pycharm如何连接ensp

pycharm如何连接ensp

使用拓扑:

在这里插入图片描述

通过云来连接本地主机和eNSP中的设备,保证双方能互相通信。IP地址规划入图中所示,现在通过python连接到SW1、SW2、SW3上做配置修改。

版本:python3.9

一、使用telnetlib修改eNSP交换机的配置:

在SW1上配置了telnet,现在通过telnetlib模块连接到SW1并创建一个Loopback0接口,ip地址为1.1.1.1/32。代码如下:

#导入telnetlib模块
import telnetlib

#设置SW1的管理地址,用户名和密码三个变量
host = "192.168.56.11"    

user = "prin"

password = "Huawei@123"

#调用telnetlib的telnet函数,连接SW1,并将值赋予tn
tn = telnetlib.Telnet(host)

#调用read_until()函数,告诉python读到Username时输入user变量的值
tn.read_until(b"Username:")
tn.write(user.encode('ascii')+b"\n")

#调用read_until()函数,告诉python读到PassWord时输入password变量的值
tn.read_until(b"Password:")
tn.write(password.encode('ascii')+b"\n")

#通过write()函数输入配置的命令,完成后退出telnet
tn.write(b"sys \n")

tn.write(b"int l0 \n")

tn.write(b"ip address 1.1.1.1 32 \n")

tn.write(b"return \n")

tn.write(b"quit\n")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

最终结果:可以看到在SW1上创建了Loopback0接口,并且有了IP地址。
在这里插入图片描述

二、使用netmiko修改eNSP交换机的配置:

在SW2上配置了SSH,现在通过netmiko模块连接到SW2并创建一个Loopback0接口,ip地址为2.2.2.2/32。

交换机SSH配置命令:

# 创建秘钥
[sw2]dsa local-key-pair create

## 配置SSH认证类型(密码/其他)
[sw2]ssh user prin authentication-type password
[sw2]ssh user prin service-type stelnet
[sw2]stelnet server enable

## 配置认证模式
[sw2]user-interface vty 0 4
[sw2-ui-vty0-4]authentication-mode aaa  //配置认证模式
[sw2-ui-vty0-4]protocol inbound ssh     //允许 ssh 连接虚拟终端

## 配置本地用户信息
[sw2]aaa
[sw2-aaa] local-user prin password cipher Huawei@123
[sw2-aaa]local-user prin privilege level 15
[sw2-aaa] local-user prin service-type ssh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

代码如下:

#netmiko需要通过pip下载
from netmiko import ConnectHandler

#设备类型为huawei,除此之外,还支持绝大多数主流厂商的设备,这也是netmiko的优势;其余上参数分别为SW2的IP,SSH的用户名和密码
SW2 ={
    'device_type': 'huawei',
    'ip': '192.168.56.22',
    'username': 'prin',
    'password': 'Huawei@123',
}

print("正在连接设备..........")
#调用ConnectHandler()函数,用上一步创建的字典进行SSH连接,并且将返回值赋予connect变量,注意**不可以省略
connect = ConnectHandler(**SW2)

print("Successfully connected to "+SW2['ip'])

#设置一个列表,其中为配置的命令,这里可以省略'sys'和'return',因为netmiko会自动加上
config_commands = ['int l0','ip address 2.2.2.2 255.255.255.255']

#调用connect的send_config_set()函数,发送配置命令,并打印出来
output = connect.send_config_set(config_commands)
print(output)

#调用connect的send_command()函数,发送配置命令,并打印
result = connect.send_command('dis ip int brief')

print(result)

#注意connect.send_command()仅能发送一个命令,而send_config_set()函数则可以一次性发送多个命令
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

运行程序打印出来的结果:
在这里插入图片描述

注意,netmiko常见支持的设备如下:


CLASS_MAPPER_BASE = {
    'a10': A10SSH,
    'accedian': AccedianSSH,
    'alcatel_aos': AlcatelAosSSH,
    'alcatel_sros': AlcatelSrosSSH,
    'apresia_aeos': ApresiaAeosSSH,
    'arista_eos': AristaSSH,
    'aruba_os': ArubaSSH,
    'avaya_ers': AvayaErsSSH,
    'avaya_vsp': AvayaVspSSH,
    'brocade_fastiron': RuckusFastironSSH,
    'brocade_netiron': BrocadeNetironSSH,
    'brocade_nos': BrocadeNosSSH,
    'brocade_vdx': BrocadeNosSSH,
    'brocade_vyos': VyOSSSH,
    'checkpoint_gaia': CheckPointGaiaSSH,
    'calix_b6': CalixB6SSH,
    'ciena_saos': CienaSaosSSH,
    'cisco_asa': CiscoAsaSSH,
    'cisco_ios': CiscoIosSSH,
    'cisco_nxos': CiscoNxosSSH,
    'cisco_s300': CiscoS300SSH,
    'cisco_tp': CiscoTpTcCeSSH,
    'cisco_wlc': CiscoWlcSSH,
    'cisco_xe': CiscoIosSSH,
    'cisco_xr': CiscoXrSSH,
    'coriant': CoriantSSH,
    'dell_force10': DellForce10SSH,
    'dell_os10': DellOS10SSH,
    'dell_powerconnect': DellPowerConnectSSH,
    'dell_isilon': DellIsilonSSH,
    'eltex': EltexSSH,
    'enterasys': EnterasysSSH,
    'extreme': ExtremeSSH,
    'extreme_wing': ExtremeWingSSH,
    'f5_ltm': F5LtmSSH,
    'fortinet': FortinetSSH,
    'generic_termserver': TerminalServerSSH,
    'hp_comware': HPComwareSSH,
    'hp_procurve': HPProcurveSSH,
    'huawei': HuaweiSSH,
    'huawei_vrpv8': HuaweiVrpv8SSH,
    'juniper': JuniperSSH,
    'juniper_junos': JuniperSSH,
    'linux': LinuxSSH,
    'mellanox': MellanoxSSH,
    'mrv_optiswitch': MrvOptiswitchSSH,
    'netapp_cdot': NetAppcDotSSH,
    'netscaler': NetscalerSSH,
    'ovs_linux': OvsLinuxSSH,
    'paloalto_panos': PaloAltoPanosSSH,
    'pluribus': PluribusSSH,
    'quanta_mesh': QuantaMeshSSH,
    'ruckus_fastiron': RuckusFastironSSH,
    'ubiquiti_edge': UbiquitiEdgeSSH,
    'ubiquiti_edgeswitch': UbiquitiEdgeSSH,
    'vyatta_vyos': VyOSSSH,
    'vyos': VyOSSSH,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

三、使用paramiko修改eNSP交换机的配置:

在SW2上配置了SSH,现在通过paramiko模块连接到SW3并创建一个Loopback0接口,ip地址为3.3.3.3/32。

代码如下:

#paramiko需要通过pip下载
import paramiko
#import time的目的是为了保证不会因为输入命令或者回显内容过快而导致SSH终端速度跟不上,仅能显示部分命令,而netmiko已经自动解决了此问题
import time

#创建三个变量,表示SW3的IP地址、SSH的用户名和密码
ip = "192.168.56.33"
username = "prin"
password = "Huawei@123"

#调用paramiko的SSHClient()函数,并赋值给ssh_client,表示本端作为SSH的客户端
ssh_client = paramiko.SSHClient()

#调用set_missing_host_key_policy()函数,用来接受SSH服务器端提供的公钥
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#调用connect()函数,输入ip地址、ssh用户名和密码三个参数,进行连接
ssh_client.connect(hostname=ip, username=username, password=password)

print("Successfully connect to ", ip)

#SSH连接成功后,需要使用invoke_shell()方法唤醒shell,并赋值给command
command = ssh_client.invoke_shell()

#调用command的send()函数,发送配置的信息给SW3
command.send("sys \n")
command.send("int l0 \n")
command.send("ip address 3.3.3.3 32 \n")
command.send("return \n")
command.send("quit \n")

#为了保证回显内容能够打印出来,需要先调用time模块的sleep()函数让python休眠2s
time.sleep(2)

#调用command的recv()函数截取回显的内容,并打印出来,65535表示截取65535个字符,也是一次性最大能够截取的
output = command.recv(65535)
print(output.decode("ascii"))

#配置完成后,使用close方法退出SSH
ssh_client.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

打印结果:
在这里插入图片描述

参考资料:《网络工程师的python之路》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/156754
推荐阅读
相关标签
  

闽ICP备14008679号