网络自动化运维 Help

2-2 服务器端配置telnet

Telenet协议介绍

telnet协议介绍:
Telnet在1969年开发出来,在RFC 15定义,是最早形成的互联网协议之一。
Telnet是TCP/IP协议族中的一种应用层协议,使用于互联网及局域网中,使用虚拟终端的形式,提供双向、以文字字符串为主的命令行接口交互功能。
是互联网远程登录服务的标准协议和主要方式,常用于服务器的远程控制,可供用户在本地主机执行远程主机上的工作。

优点: 简单。
缺点: 所传输的资料并未加密,账号和密码等敏感资料容易会被窃听,因此此协议逐渐被淘汰,改用更安全的SSH协议。

实验设计:

  1. 在eNSP中使用交换机设备S5700,配置vlan,配置IP,通过Cloud设备暴露通讯使之与物理机互通。

  2. 服务端设备开启telnet服务。

  3. 客户端使用Python telnetlib库进行连接验证。

确定S5700已配置IP和与物理机连通

快速重复2-1节的S5700配置IP和Cloud与物理机通讯实验。

或直接下载eNSP工程导入:
解压缩老师分发的eNSP工程zip压缩包,eNSP界面左上角/打开/选择工程文件入口文件.topo后缀的文件。

⏬下载地址: eNSP工程-unit2-S5700与物理机通讯后.zip

验证:

ping 192.168.56.100

服务器开启telnet服务

配置telnet协议和WindowsTelnet客户端测试,视频结合下面两段图文看。

设备: 已配置vlan和IP的S5700交换机。

  1. 进入配置模式

  2. 配置vty伪终端: (Virtual Teletypewriter),在Linux系统中被称为tty。服务器操作系统中直接打开的命令行是“真”终端。通过客户机上的命令行远程连到物理服务器上,叫做“伪终端”。 华为vty伪终端默认有5个,后面可能会用windows上的telnet客户端和python作为客户端连接,因此保险起见5个伪终端都要设置。参数0 4表示从第一个设置到第五个。

  3. 设置伪终端登录方式为密码登录

  4. 设置密码为Huawei@123

  5. 设备防火墙方通入方向、telnet的请求。

  6. 用户权限分为3大等级,15细分等级,数字越大权限越高。相当于linux上的root用户。这样方便执行后续命令和测试。

  7. 退出伪终端相关设置

  8. 开启telnet协议。这句话也可以放最开头。

代码主要关于设置伪终端,确保客户端的请求能正常进来。设备自带telnet软件,只需一行命令就能开启。

<Huawei> system-view [Huawei] user-interface vty 0 4 [Huawei-ui-vty0-4] authentication-mode password [Huawei-ui-vty0-4] set authentication password simple Huawei@123 [Huawei-ui-vty0-4] protocol inbound telnet [Huawei-ui-vty0-4] user privilege level 15 [Huawei-ui-vty0-4] quit [Huawei] telnet server enable

Windows自带的telnet客户端连接测试

(选做,可略过)
Windows自带telnet协议客户端。这是成熟正确的工具,如果连不上,则确定服务端网络设备配置有误;
如果直接进行Python telnetlib库测试,失败,则不能完全确定问题出在服务端还是客户端代码有误。

  1. 连接

    2 2windows telnet 1

  2. 输入密码(输入密码时无*号提示,注意输入法英文状态,密码Huawei@123要输入正确。)

    2 2windows telnet 2

  3. 发现已经登录进设备了,可以像在"真终端"中一样输入命令

Python客户端telnetlib连接测试

实验目的:用telnetlib库进行客户端连接测试,如果连上,说明服务端S5700 IP可达、telnet协议配置正确。 连上后输入密码鉴权,输入命令,接收设备端回显信息,那么理论上就可以通过更复杂的py脚本控制多台网络设备。

import telnetlib # 内置库。3.13解释器版本移除,目前为不建议状态,但代码最简单和典型。 host = '192.168.56.100' # 服务端IP password = 'Huawei@123' # 服务端telnet协议密码 port = 23 # telnet协议默认23端口 tn = None try: # 实例化客户端类,连接服务器。这行最为核心,不加try语句块的情况下写完这行就可以运行,不报错就是整章实验基本成功。 tn = telnetlib.Telnet(host=host, port=23, timeout=5) # 根据Windows上客户端的测试,请求连接后服务端回显信息为"Password:"并等待用户输入,因此接收回显信息并查找这个特征。 tn.read_until(b'Password:') # 输入密码 # 由于这个库比较老比较偏低层,传入的参数类型都为字节类型。\n换行表示回车。 tn.write(password.encode(encoding='ascii') + b'\n') # 监测到"<Huawei>"即为通过telnet协议登录vty伪终端成功,可以操控服务端。 # 那么我们之前在eNSP直接双击就能登录设备用的是什么协议呢?那是"真终端",操作系统直连的显示器。 # 后面几章将通过SSH协议登录 print(tn.read_until(b'<Huawei>').decode('ascii')) tn.write('display user-interface'.encode('ascii') + b'\n') print(tn.read_until(b'UIs').decode('ascii')) except TimeoutError as e: print(e) finally: # 在大多数情况下,Python程序结束时会自动回收变量、关闭文件句柄。 # 但在telnet库测试中我发现如果开始几次不正确,那么5个vty伪终端被用尽并且不会自动释放, # 即使后面代码调对了也不会运行成功。因此在finally语句块中确保执行.close()。 tn.close()

最终结果

2 2

08 三月 2025