Telnet 连接 Linux:深入解析、操作指南与安全实践
Telnet(Telecommunication Network)作为一种历史悠久的网络协议,曾是远程登录和管理类Unix系统(包括Linux)的主要手段,其核心功能是提供面向终端的双向交互式文本通信,允许用户通过网络在远程主机上执行命令,如同坐在本地终端前操作。

Telnet 的核心机制与现状:
Telnet 工作在 TCP/IP 协议栈的应用层,默认使用 TCP 端口 23,客户端程序(如 Linux 中的 telnet 命令、Windows 的 telnet.exe 或第三方工具如 PuTTY)与服务器端的 telnetd 守护进程建立连接,连接建立后,客户端键盘输入被发送到服务器,服务器终端输出则回显到客户端屏幕,Telnet 最大的缺陷在于其通信过程完全以明文(plaintext)传输,包括至关重要的用户名和密码,这意味着任何能够截获网络流量的人(如处于同一局域网的攻击者或路径上的恶意节点)都可以轻易获取这些敏感信息,带来严重的安全风险,在现代 IT 环境中,SSH(Secure Shell)协议凭借其强大的加密和认证机制,已完全取代 Telnet 成为远程管理的标准方式。
在 Linux 上启用 Telnet 服务(仅限测试或绝对必要环境):
-
安装 Telnet 服务器软件:
- 基于 Debian/Ubuntu:
sudo apt update sudo apt install telnetd
- 基于 RHEL/CentOS/AlmaLinux/Rocky Linux:
sudo yum install telnet-server # 对于较新版本使用 dnf
- 基于 Debian/Ubuntu:
-
启动并启用服务:
- Systemd 系统 (主流现代发行版):
sudo systemctl start telnet.socket # 启动监听套接字 sudo systemctl enable telnet.socket # 设置开机自启
- SysVinit 系统 (较老发行版):
sudo service xinetd restart # Telnet 通常由 xinetd 管理 sudo chkconfig telnet on # 或 update-rc.d telnet defaults (Debian系)
- Systemd 系统 (主流现代发行版):
-
配置防火墙(如有): 允许 TCP 23 端口入站流量。
firewalld(RHEL系):sudo firewall-cmd --permanent --add-service=telnet sudo firewall-cmd --reload
ufw(Ubuntu):sudo ufw allow 23/tcp
iptables(通用):sudo iptables -A INPUT -p tcp --dport 23 -j ACCEPT # 并保存规则 (方法依发行版而定)
从客户端连接 Linux Telnet 服务器:
-
基本连接:
telnet <服务器IP地址或主机名>
或指定端口(默认23可省略):

telnet <服务器IP地址或主机名> 23
-
登录过程:
连接建立后,会提示输入用户名和密码。注意:这些信息在网络中以明文传输!Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. Ubuntu 20.04.4 LTS server-hostname login: your_username Password: your_password (输入时不显示) Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-124-generic x86_64) ... system information ... your_username@server-hostname:~$成功登录后,你将获得一个远程 shell 提示符,可以执行命令。
-
断开连接: 输入
logout,exit或按Ctrl+]进入 telnet 命令模式后输入quit。
主流 Linux 发行版 Telnet 服务管理命令对比
| 功能 | 基于 RHEL/CentOS (Systemd) | 基于 Debian/Ubuntu (Systemd) | 使用 SysVinit/xinetd (较旧系统) |
|---|---|---|---|
| 安装服务器 | sudo yum/dnf install telnet-server |
sudo apt install telnetd |
sudo yum/apt install telnetd |
| 启动服务 | sudo systemctl start telnet.socket |
sudo systemctl start telnet.socket |
sudo service xinetd restart |
| 停止服务 | sudo systemctl stop telnet.socket |
sudo systemctl stop telnet.socket |
sudo service xinetd stop (或编辑配置禁用) |
| 开机自启 | sudo systemctl enable telnet.socket |
sudo systemctl enable telnet.socket |
sudo chkconfig telnet on (RHEL系) 或 sudo update-rc.d telnet defaults (Debian系) |
| 禁用开机自启 | sudo systemctl disable telnet.socket |
sudo systemctl disable telnet.socket |
sudo chkconfig telnet off 或 sudo update-rc.d telnet remove |
| 查看状态 | sudo systemctl status telnet.socket |
sudo systemctl status telnet.socket |
sudo service xinetd status |
经验案例:调试遗留工业控制设备的风险与妥协
笔者曾参与一个工厂自动化升级项目,需要配置一台运行专有旧版 Linux 的 PLC(可编程逻辑控制器),该设备仅支持 Telnet 管理且固件无法升级。权衡风险后采取以下严格措施:
- 物理隔离: 将该 PLC 置于独立的 VLAN,仅允许特定管理主机访问,严格禁止其访问互联网或其他生产网段。
- 专用管理主机: 使用一台物理隔离、定期打补丁的加固 Linux 笔记本进行连接,该主机不存储任何其他敏感信息。
- 一次性凭据: 连接完成后立即在 PLC 上更改密码(虽然明文传输风险仍在)。
- 最小化操作: 仅执行必要配置,完成后立即在 PLC 上禁用 Telnet 服务 (
killall telnetd或移除以节省资源)。 - 日志监控: 在网络边界部署 IDS/IPS,严格监控指向该 PLC Telnet 端口的任何异常连接尝试,这个案例深刻说明了 Telnet 在现代环境中的使用必须是临时的、被充分认知风险的、并辅以严格补偿性控制措施的,理想方案是推动设备更换或要求厂商提供支持 SSH 的固件。
Telnet 安全警示与最佳实践:
- 绝对优先使用 SSH:
ssh username@hostname是安全远程管理的唯一推荐方式,它提供端到端的强加密、主机验证、用户认证和数据完整性保护。 - 禁用 Telnet 服务: 除非有极其特殊且无法规避的理由,否则应在所有 Linux 系统上永久禁用并卸载 Telnet 服务器。
# Systemd 系统禁用并停止 sudo systemctl disable --now telnet.socket # 卸载服务器软件 sudo yum remove telnet-server # RHEL系 sudo apt remove telnetd # Debian/Ubuntu系
- 防火墙封锁: 确保防火墙默认阻止 TCP 23 端口入站流量。
- 强制使用场景下的补偿控制:
- VPN 隧道: 要求用户先连接到受信任的 VPN,然后在加密隧道内使用 Telnet。
- 网络隔离: 将仅支持 Telnet 的设备放入高度隔离的网络段。
- 跳板机 (Bastion Host): 通过一台配置严格访问控制、审计和强认证(如 SSH + MFA)的跳板机来访问 Telnet 设备。
- 加密代理/网关: 使用特殊的网关设备,在网关处终止 SSL/TLS 连接,然后在隔离网段内以 Telnet 明文连接到后端设备(风险转移到网关与后端之间)。
- 强密码策略: 虽然无法解决窃听问题,但使用长且复杂的密码能增加密码被破解的难度(如果攻击者只捕获到一次会话)。
- 详尽审计: 记录所有 Telnet 访问日志(来源 IP、用户、时间),并实时监控异常活动。
经验案例:Wireshark 抓包演示的震撼教育

在内部安全培训中,笔者曾进行一个简单演示:让学员 A 通过 Telnet 登录到一台实验虚拟机,同时学员 B 在同一局域网用 Wireshark 抓包,短短几秒内,学员 B 就成功从捕获的数据包中明文提取出学员 A 输入的用户名和密码,这个直观的演示比任何理论说教都更能让学员深刻理解 Telnet 的本质性安全缺陷,并彻底打消在生产环境使用它的念头。
Telnet 是一个在技术上简单易用的远程登录协议,但其固有的明文传输特性使其在现代网络环境中极度危险且不应被使用,理解其工作原理和配置方法更多是出于历史认知或处理极端遗留场景的需要。SSH 是远程管理 Linux 系统的唯一安全、可靠和标准的解决方案。 任何考虑启用 Telnet 的决定都必须经过最高级别的安全风险评估,并实施严格的多层补偿性控制措施,在绝大多数情况下,正确的行动是:禁用、卸载、封锁、遗忘 Telnet,全面拥抱 SSH。
FAQ
-
问:为什么 SSH 比 Telnet 安全得多?
答: SSH 的核心优势在于其强大的加密机制,它在整个通信过程中(包括登录认证和后续的所有命令、输出)使用如 AES 等加密算法对数据进行加密,即使数据包被截获,攻击者也无法解读内容,SSH 还提供主机密钥验证(防止中间人攻击)、支持多种强认证方式(公钥认证比密码更安全)以及数据完整性校验,而 Telnet 的所有数据都是明文传输,毫无安全性可言。 -
问:如果我管理的旧设备/嵌入式系统只支持 Telnet,完全没有 SSH 选项,我该怎么办?
答: 这是最具挑战性的场景,务必采取严格的补偿性控制措施:- 网络隔离: 将该设备放入专用的、物理或逻辑隔离的网络(VLAN),严格限制其与其他网络的通信,尤其禁止访问互联网。
- 访问控制: 使用防火墙精确控制哪些 IP 地址可以连接到该设备的 Telnet 端口(23)。
- 跳板机/堡垒机: 强制要求管理员先通过强认证(SSH + MFA)登录到一台安全加固的跳板机,然后从跳板机发起 Telnet 连接到目标设备,这样可以在跳板机上实施详细的访问审计。
- VPN 隧道: 要求管理员先连接到企业 VPN(提供加密通道),然后在 VPN 内部使用 Telnet 连接设备。
- 定期审计与监控: 密切监控该设备的 Telnet 访问日志和网络流量,寻找异常行为。
- 推动升级/替换: 将此视为重大安全风险,积极向管理层沟通,争取预算尽快更换支持 SSH 的设备或升级固件,将此风险纳入正式的风险登记册。
国内权威文献来源:
- 《Linux服务器安全策略详解》(第2版), 刘晓辉、张栋 著, 电子工业出版社。 (该书系统阐述了 Linux 服务器安全基础、网络服务安全配置(明确包含 Telnet 风险与 SSH 配置)、入侵检测与防御等,是服务器安全领域的实践指南。)
- 《操作系统安全》(第3版), 卿斯汉 等著, 清华大学出版社。 (作为操作系统安全领域的经典教材,深入剖析了安全机制原理,其中对身份认证、访问控制、安全通信协议(如对比 Telnet 与 SSH 的安全性差异)有理论基础层面的权威论述。)
- GB/T 25069-2010《信息安全技术 术语》。 (中华人民共和国国家标准,为信息安全领域提供了权威的术语定义和概念框架,是理解安全通信协议要求的基础依据。)
- GB/T 30276-2013《信息安全技术 网络基础安全技术要求》。 (中华人民共和国国家标准,规定了网络基础设施应满足的安全技术要求,其中必然涵盖对远程管理协议安全性的要求,隐含了对 Telnet 这类明文协议的不符合性。)
- 《Linux系统管理与网络管理》(第3版), 余洪春 著, 清华大学出版社。 (广泛使用的 Linux 管理教材,详细讲解了包括 Telnet 和 SSH 在内的各种网络服务的配置、管理与安全注意事项,具有很高的实践参考价值。)


















