您的位置:首页 > 汽车 > 新车 > 网站建设市场需求大_广东网站设计流程_杭州seo搜索引擎优化公司_成人短期就业培训班

网站建设市场需求大_广东网站设计流程_杭州seo搜索引擎优化公司_成人短期就业培训班

2025/8/30 20:15:49 来源:https://blog.csdn.net/ZZZCY2003/article/details/147068556  浏览:    关键词:网站建设市场需求大_广东网站设计流程_杭州seo搜索引擎优化公司_成人短期就业培训班
网站建设市场需求大_广东网站设计流程_杭州seo搜索引擎优化公司_成人短期就业培训班

        其实登录远程设备(交换机路由器)的方式无非就是通过SSH或者是Telnet这两个协议,当然最主要的还是SSH,这里主要讲的是通过这两个协议登录远程设备的几个方式

        拓扑

        本文都是用的这个拓扑,主要通过编写python脚本来登录其中的交换机,重点不是这个拓扑,所以这里就简单的配置。交换机连接的那个可以尝试在vlan 1配置地址,接口是默认连通vlan 1,所以vlan 1是管理IP地址

账号密码:Telnet:zzz/12345           SSH:ren/12345

# Telnet交换机配置
[SW-telnet]user-interface vty 0 4
[SW-telnet-ui-vty0-4]authentication-mode aaa
[SW-telnet-ui-vty0-4]protocol inbound telnet
[SW-telnet-ui-vty0-4]q
[SW-telnet]aaa
[SW-telnet-aaa]local-user zzz password cipher 12345
Info: Add a new user.
[SW-telnet-aaa]local-user zzz privilege level 15
[SW-telnet-aaa]local-user zzz service-type telnet
[SW-telnet-aaa]q
[SW-telnet]stelnet server enable
Info: Succeeded in starting the Stelnet server.
[SW-telnet]ssh authentication-type default password
[SW-telnet]
# SSH交换机配置
[SW3]user-interface vty 0 4
[SW3-ui-vty0-4]authentication-mode aaa
[SW3-ui-vty0-4]protocol inbound ssh
[SW3-ui-vty0-4]q
[SW3]aaa
[SW3-aaa]local-user ren password cipher 12345
Info: Add a new user.
[SW3-aaa]local-user ren privilege level 15
[SW3-aaa]local-user ren service-type ssh
[SW3-aaa]q
[SW3]stelnet server enable
Info: Succeeded in starting the Stelnet server.
[SW3]ssh authentication-type default password
[SW3]

后面打算是尝试批量登录交换机,所以设置了两个SSH的交换机,但都是一样的配置,一个地址为11,一个为12

通过Telnet进行登录

引入telnetlib、time库(安装python时自带)

不知道为啥,我电脑执行脚本的时候他没有找到telnet库,可能是环境变量的原因,不过这次我就直接在虚拟机上弄了。至于time库是为了让设备能够有时间执行输入命令,不然会吞掉个别指令

import telnetlib
import time

 

连接设备参数

一般这三个就可以,不排除一些比较严格会出现端口、使能密码等

host = "192.168.88.21"
user = "zzz"
password = "12345"

 

连接设备

通过telnetlib.Telnet()函数连接上设备,然后通过捕抓关键字,输入用户和密码 

tn = telnetlib.Telnet(host)
tn.read_until(b"Username:")
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"Password:")
tn.write(password.encode('ascii') + b"\n")

 

执行命令

tn.write(b"sys\n")
tn.write(b"interface LoopBack 0\n")
tn.write(b"ip address 1.1.1.1 255.255.255.255\n")

 

打印输入

最后通过close()函数关闭Telnet连接

print(tn.read_very_eager().decode('ascii'))tn.close()

完整代码 

import telnetlib
import timehost = "192.168.88.21"
user = "zzz"
password = "12345"tn = telnetlib.Telnet(host)
tn.read_until(b"Username:")
tn.write(user.encode('ascii') + b"\n")
tn.read_until(b"Password:")
tn.write(password.encode('ascii') + b"\n")
tn.write(b"sys\n")
tn.write(b"interface LoopBack 0\n")
tn.write(b"ip address 1.1.1.1 255.255.255.255\n")# 延迟等待
time.sleep(0.5)
tn.write(b"quit\n")print(tn.read_very_eager().decode('ascii'))tn.close()

运行结果

通过SSH进行登录

        跟Telnet相比,SSH的安全性更高。这里我们主要用paramiko和netmiko两个库来进行SSH登录,同时这两个库跟telnetlib不同,并不是python的内置库,我们需要提前安装,也简单

pip install paramiko
pip install netmiko

直接在命令行输入上面两条命令就行,这里我就不演示了

paramiko登录

引入paramiko、time库

import paramiko
import time

连接设备参数

ip = "192.168.88.11"
username = "ren"
password = "12345"

连接设备

这里的三行代码,算是连接的标志,SSH连接设备都需要这三行代码

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)

执行命令

成功连接设备之后,需要通过invoke_shell()来调用命令行

print ("Successfully connected to ",ip)
command = ssh_client.invoke_shell()
command.send("sys\n")
command.send("int loop 1\n")
command.send("ip address 2.2.2.2 255.255.255.255\n")
command.send("return\n")

打印输入

time.sleep(2)
output = command.recv(65535)
print (output.decode("ascii"))ssh_client.close

完整代码

import paramiko
import timeip = "192.168.88.11"
username = "ren"
password = "12345"ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)print ("Successfully connected to ",ip)
command = ssh_client.invoke_shell()
command.send("sys\n")
command.send("int loop 1\n")
command.send("ip address 2.2.2.2 255.255.255.255\n")
command.send("return\n")time.sleep(2)
output = command.recv(65535)
print (output.decode("ascii"))ssh_client.close

运行结果

netmiko登录

看了前面的,也应该有所了解,这里就直接先上代码和结果

完整代码

from netmiko import ConnectHandlerSW2 = {'device_type': 'huawei','ip': '192.168.88.12','username': 'ren','password': '12345',
}connect = ConnectHandler(**SW2)
print ("Successfully connected to " + SW2['ip'])
config_commands = ['int loop 1', 'ip address 3.3.3.3 255.255.255.255']
output = connect.send_config_set(config_commands)
print (output)
result = connect.send_command('disp cur int loop 1')
print (result)

运行结果

讲解

        这里的netmikok主要是通过先导入netmiko的ConnectHandler,这个是用来建立与网络设备的连接。然后跟前两个代码不同的是,将设备类型、IP地址、用户名和密码定义为了一个字典,后面直接通过**将参数传递给ConnectHandler。将配置命令定义为一个列表,使用send_config_set方法将这些命令发送到设备上。

批量登录用户名密码不同的设备(JSON)

        在实际生活中,需要登录的交换机可能会存在用户名密码不一样的情况,但是需要更改的配置是一样的,这时候我们就可以尝试更改下我们的登录方式,联合JSON登录

当然,这里我们需要先将环境整理好。将SW3增加一个密码54321的用户qwe

等SW3配置好了之后,还没有要到写python代码的时候,我们还需要在python代码的目录下增加一个JSON文件(switches.json)新建txt文件,重命名就好。输入你要登录的设备相应的参数,这样我们写python代码的时候,就可以直接引用这个文件

[{"name": "SW-ssh","connection": {"device_type": "huawei","host": "192.168.88.11","username": "ren","password": "12345"}},{"name": "SW3","connection": {"device_type": "huawei","host": "192.168.88.12","username": "qwe","password": "54321"}}
]

python代码

import json
from netmiko import ConnectHandlerwith open("switches.json") as f:devices = json.load(f)for device in devices:with ConnectHandler(**device['connection']) as conn:hostname = device['name']print(f'已经成功登录交换机{hostname}')output = conn.send_command('display cur | i sysname')print(output)

讲解

        利用open打开switches.json文件,得到设备的参数,然后通过循环轮流登录设备,并输出设备名称

运行结果

批量登录IP地址不连续的设备

        同样的,你也会碰到地址不连续的设备,这时候可以怎么做?上面是通过打开json文件来解决,这里则比较简单了,直接引入一个写满我们要登录的设备IP地址的txt文件,然后也是通过循环来遍历登录每一台设备

        当然我们的设备还是需要更改一下IP地址,让他不连续,将SW3的192.168.88.12/24更改为192.168.88.15/24

        然后我们在python代码文件旁边创建一个ip_list.txt文件,里面放我们的IP地址

python代码

import paramiko
import time
from getpass import getpassusername = input('Username: ')
password = getpass('password: ')f = open("ip_list.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, look_for_keys=False)print ("Successfully connect to ", ip)remote_connection = ssh_client.invoke_shell()remote_connection.send('dis int vlan 1\n')time.sleep(1)output = remote_connection.recv(65535)print (output.decode("ascii"))f.close()
ssh_client.close()

讲解

        这里值得注意的是,我们在代码里隐藏了用户和密码,将这个转为命令行输入,且隐藏输入,增加了安全性

运行结果

        最后,本文介绍了如何使用 Python 自动登录远程华为设备,并执行配置命令。我们使用了 Telnet、SSH 和 Paramiko 库来实现这一功能,并展示了如何通过 JSON 文件批量登录不同用户名和密码的设备。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com