⚠️ 重要安全警告
Telnet 是一种不安全的协议,它在网络上传输所有数据(包括用户名和密码)时都是明文的,这意味着任何在网络上进行嗅探(sniffing)的人都能轻易地截获你的凭据。

强烈建议:
- 仅在完全信任的内网环境中使用,例如在家庭实验室或没有外部网络访问的测试环境中。
- 对于任何需要安全连接的生产环境,请使用 SSH (Secure Shell),现代 Linux 发行版默认都安装并启用 SSH 服务,它使用加密来保护所有通信。
如果你已经了解并接受风险,请继续下面的步骤。
第一步:检查并安装 Telnet 服务器
大多数现代 Linux 发行版默认不安装 Telnet 服务器,但通常会包含 telnet 客户端工具,我们需要单独安装服务器端软件。
检查是否已安装
在终端中运行以下命令,检查 xinetd 是否已安装(Telnet 服务通常由 xinetd 超级服务器管理):

rpm -q xinetd # 适用于 CentOS, RHEL, Fedora # 或 dpkg -l xinetd # 适用于 Debian, Ubuntu
如果命令没有输出或显示“package is not installed”,则表示需要安装。
安装 Telnet 服务器
对于基于 Debian/Ubuntu 的系统:
# 更新软件包列表 sudo apt update # 安装 xinetd 和 telnetd sudo apt install xinetd telnetd
对于基于 CentOS/RHEL/Fedora 的系统:
# 安装 xinetd 和 telnet-server sudo yum install xinetd telnet-server # 对于 CentOS 8+ / RHEL 8+ / Fedora, 使用 dnf # sudo dnf install xinetd telnet-server
第二步:配置 Telnet 服务
Telnet 服务通常由 xinetd 来管理,所以我们需要编辑 xinetd 的配置文件。

编辑配置文件
打开 telnet 的配置文件:
sudo nano /etc/xinetd.d/telnet
如果文件不存在,你可以手动创建一个,文件内容应该如下所示:
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = yes # <-- 将这里的 yes 改为 no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
关键配置项:
disable = yes:这行控制 Telnet 服务是否被禁用。将其修改为disable = no,以启用该服务。
保存并关闭文件(在 nano 中是 Ctrl+X,然后按 Y,再按 Enter)。
第三步:启动并启用服务
启动 xinetd 服务
xinetd 是一个超级服务器,它会根据配置文件来管理它下面的各种服务(如 Telnet),我们需要确保 xinetd 本身正在运行。
# 对于 systemd 系统 (Ubuntu 16.04+, CentOS 7+, Debian 8+) sudo systemctl start xinetd sudo systemctl enable xinetd # 对于较旧的系统使用 SysVinit sudo service xinetd start sudo chkconfig xinetd on
检查服务状态
验证 xinetd 是否正在运行,Telnet 端口(通常是 23)是否在监听。
# 检查 xinetd 服务状态 sudo systemctl status xinetd # 检查端口 23 是否在监听 netstat -tuln | grep 23 # 或者使用 ss 命令 (更现代) ss -tuln | grep 23
如果看到类似 tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 的输出,说明 Telnet 服务器已经成功启动并正在监听。
第四步:配置防火墙(非常重要)
如果你的服务器启用了防火墙(如 ufw 或 firewalld),你需要开放 Telnet 的 23 端口,否则外部无法连接。
对于使用 UFW (Uncomplicated Firewall) 的系统 (如 Ubuntu):
# 允许 TCP 端口 23 的入站连接 sudo ufw allow 23/tcp # 检查防火墙规则 sudo ufw status
对于使用 Firewalld 的系统 (如 CentOS/RHEL/Fedora):
# 永久开放 TCP 端口 23 sudo firewall-cmd --permanent --add-port=23/tcp # 重新加载防火墙规则以应用更改 sudo firewall-cmd --reload # 检查是否已添加 sudo firewall-cmd --list-ports
第五步:测试连接
你可以从另一台计算机(在同一局域网内)上使用 Telnet 客户端来连接你的服务器。
- 打开命令行终端。
- 使用
telnet命令,后跟服务器的 IP 地址。
telnet <你的服务器IP地址>
telnet 192.168.1.100
如果连接成功,你将看到类似以下的提示,并可以输入用户名和密码进行登录。
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
CentOS 7 (Core)
Kernel 3.10.0-1160.36.2.el7.x86_64 on an x86_6
localhost login:
常见问题排查
-
连接被拒绝 (Connection refused)
- 原因1:
xinetd服务未运行,检查sudo systemctl status xinetd。 - 原因2:
telnet服务在xinetd配置中仍是disable = yes,检查/etc/xinetd.d/telnet文件。 - 原因3:防火墙阻止了端口 23,检查并开放防火墙端口。
- 原因4:服务器绑定了特定的 IP 地址,而不是
0.0.0,检查netstat -tuln | grep 23的输出。
- 原因1:
-
登录后立即断开
- 这通常是由于
/etc/securetty文件配置导致的,该文件列出了允许root用户通过telnet登录的终端设备。 - 要允许
root通过 Telnet 登录,可以编辑/etc/securetty文件,确保其中包含pts/0,pts/1等内容(或者直接清空该文件,但这会降低安全性)。 - 最佳实践:不要使用
root用户通过 Telnet 登录,建议创建一个普通用户,并使用su或sudo来提升权限。
- 这通常是由于
如何禁用/卸载 Telnet 服务器
如果你不再需要 Telnet,出于安全考虑,应该禁用或卸载它。
-
禁用服务:
# 编辑 /etc/xinetd.d/telnet 文件,将 disable = no 改回 disable = yes sudo nano /etc/xinetd.d/telnet
-
停止
xinetd服务:sudo systemctl stop xinetd
-
卸载软件包:
# Debian/Ubuntu sudo apt remove xinetd telnetd # CentOS/RHEL/Fedora sudo yum remove xinetd telnet-server
-
关闭防火墙端口:
# UFW sudo ufw delete allow 23/tcp # Firewalld sudo firewall-cmd --permanent --remove-port=23/tcp sudo firewall-cmd --reload
