怎么在Linux中安装并配置Telnet服务端
详细讲解在常见Linux发行版(Ubuntu/Debian与CentOS/RHEL)中安装、配置和管理Telnet服务端的完整流程,包括xinetd与systemd配置、防火墙放行及关键安全替代方案。
在Linux环境中,配置Telnet服务端的核心流程是安装守护软件包、配置托管进程(如xinetd或systemd套接字)、放行防火墙23端口,并创建非特权用户用于身份验证。由于Telnet在网络中全程采用明文传输,现代运维通常将其作为隔离局域网调试、嵌入式系统维护或SSH服务升级故障时的临时备份通道。本文将按照标准实施路径,讲解在主流Linux发行版中完成Telnet服务端搭建的具体操作与验证方式。
一、基础认知与运行机制
Telnet服务端并不总是作为独立的持久守护进程在后台监听,在许多Linux体系中,它通过超级服务器守护进程(xinetd)或现代系统的套接字激活(systemd socket activation)来按需调用。当有客户端发起TCP 23端口的连接请求时,监听器捕获该请求并派生出Telnet会话进程与终端登录程序交互。
二、标准安装与配置流程
在Linux操作系统中,不同发行版的包管理器和服务管理器存在差异。总体上可以归纳为以Ubuntu/Debian为代表的Deb包体系,以及以CentOS/RHEL为代表的RPM包体系。以下为标准的四阶段实施步骤:
1. Ubuntu / Debian 系统环境安装与配置
在Debian系发行版中,通常使用 telnetd 或结合超级守护进程 openbsd-inetd 来管理连接。
执行以下命令更新软件源并安装服务端套件:
sudo apt update
sudo apt install -y telnetd openbsd-inetd
安装完成后,openbsd-inetd 会自动在 /etc/inetd.conf 中注册服务配置项。我们可以通过检查该文件确认配置是否生效:
grep "^telnet" /etc/inetd.conf
示例输出:
telnet tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
接下来启动 inetd 服务并将其设为开机自启:
sudo systemctl restart inetutils-inetd || sudo systemctl restart openbsd-inetd
sudo systemctl enable openbsd-inetd
2. CentOS / RHEL / Rocky Linux 系统环境安装与配置
在RedHat系发行版中,Telnet服务端软件包名为 telnet-server。早期的版本依赖 xinetd,而在较新的版本(如CentOS 8/9、Rocky Linux等)中,直接提供原生的 telnet.socket 供 systemd 进行套接字激活。
通过 dnf 或 yum 安装服务组件:
sudo dnf install -y telnet-server telnet
若系统通过 systemd socket 管理,直接启动 telnet.socket 即可:
sudo systemctl enable --now telnet.socket
如果使用的是基于 xinetd 的旧系统,需创建或编辑 /etc/xinetd.d/telnet 文件,确保服务未被禁用(即 disable = no):
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
保存后重启 xinetd:
sudo systemctl restart xinetd
sudo systemctl enable xinetd
3. 防火墙策略放行
Telnet使用标准端口 23/tcp。如果在宿主机启用了防火墙,外部请求将会被直接阻断或丢弃。
在 CentOS/RHEL (firewalld) 中放行端口:
sudo firewall-cmd --permanent --add-service=telnet
sudo firewall-cmd --reload
在 Ubuntu/Debian (ufw) 中放行端口:
sudo ufw allow 23/tcp
sudo ufw reload
三、状态验证与连接测试
完成配置后,必须在服务端本地确认端口已处于监听状态,再从客户端进行连通性测试。
1. 检查服务端监听端口
使用 ss 命令查看系统当前是否在 23 端口正常监听:
ss -tulpn | grep :23
示例输出:
tcp LISTEN 0 128 *:23 *:* users:(("systemd",pid=1,fd=45))
输出中看到 LISTEN 即代表监听通道已正常建立。
2. 客户端发起连接
在同一局域网下的客户端计算机上,输入目标主机的IP地址进行连接:
telnet 192.168.1.100 23
连接成功后,终端将输出如下所示的提示信息:
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
Kernel 5.15.0 on an x86_64
server-node login:
在此输入非 root 用户名及密码,即可成功进入远程终端环境。
出于安全防御设计,绝大多数 Linux 系统的 PAM 模块和 /etc/securetty 会默认禁止 root 用户直接通过 Telnet 登录。如果输入 root 账号并提供正确密码,仍会提示 Login incorrect。
推荐做法:使用普通用户登录系统后,通过 su - 或 sudo -i 提权切换至管理员角色。不建议通过清空 /etc/securetty 来强制允许 root 直登,这会显著增加安全隐患。
四、安全风险排查与协议对比
理解为什么Telnet在现代生产环境中被限制,有助于评估其适用范围。Telnet与SSH的核心差异在于传输层是否具备非对称加密、会话密钥协商与完整性校验机制。
五、操作全周期总结与常见排障
为了保障配置完成后系统处于可控状态,请依照以下总结路径复核整个部署环节:
在排障过程中,若遇到无法连接的问题,可以按照以下三个具体现象对症处理:
- 提示 Connection timed out:优先排查网络路径和防火墙。确认服务端主机与客户端之间是否处于同一网段,或者云服务器安全组是否已经放行 23 端口入站流量。
- 提示 Connection refused:代表目标宿主机网络可达,但 23 端口没有进程在监听。可通过
systemctl status telnet.socket(CentOS)或systemctl status openbsd-inetd(Ubuntu)确认守护程序是否处于 active 运行状态。 - 任务完成后及时关闭服务:如果搭建 Telnet 服务端仅是为了升级 OpenSSH 或排查临时故障,任务结束之后应立即停止服务并关闭端口,避免系统长期暴露在明文传输的安全风险中:
sudo systemctl stop telnet.socket || sudo systemctl stop openbsd-inetd sudo systemctl disable telnet.socket || sudo systemctl disable openbsd-inetd
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













