在Linux系统中,telnet服务是一种用于远程登录的协议,允许用户通过网络连接到远程主机并执行命令,尽管由于telnet采用明文传输,存在一定的安全风险(建议生产环境优先使用SSH加密协议),但在某些测试环境或特定场景下,仍需开启telnet服务,本文将详细介绍在不同Linux发行版中开启telnet服务的完整步骤,包括安装、配置、防火墙设置及服务验证等内容,帮助用户顺利完成telnet服务的部署。
检查系统是否已安装telnet服务
在开启telnet服务前,需先确认系统是否已安装telnet服务端(telnet-server)和客户端(telnet-client),服务端用于提供远程登录服务,客户端用于连接其他telnet服务器。
检查服务端安装状态
-
CentOS/RedHat系统
使用以下命令检查是否已安装telnet-server:rpm -qa | grep telnet-server
若返回结果为空,则表示未安装;若显示类似“telnet-server-0.17-66.el7.x86_64”,则已安装。
-
Ubuntu/Debian系统
使用以下命令检查:dpkg -l | grep telnetd
若未安装,返回结果为空;已安装则显示类似“telnetd-0.17-41ubuntu1.3”。
检查客户端安装状态
客户端通常用于测试本地或远程telnet连接,检查命令与服务端类似:
- CentOS/RedHat:
rpm -qa | grep telnet
- Ubuntu/Debian:
dpkg -l | grep telnet
若未安装客户端,后续可通过安装命令一并安装(客户端通常随服务端安装包一同提供)。
安装telnet服务
若系统未安装telnet服务端或客户端,需根据不同发行版使用包管理器进行安装。
CentOS/RedHat系统
使用yum
(CentOS 7及以下)或dnf
(CentOS 8及以上)安装:
# CentOS 7及以下 yum install telnet-server telnet -y # CentOS 8及以上 dnf install telnet-server telnet -y
安装过程中,若提示依赖冲突或仓库问题,可更新包列表(yum update
或dnf update
)后重试。
Ubuntu/Debian系统
使用apt
安装:
sudo apt update sudo apt install telnetd telnet -y
telnetd
是Ubuntu/Debian中telnet服务端的包名,telnet
为客户端包名,安装完成后,可通过systemctl status telnetd
(Ubuntu 18.04+)或service telnetd status
(旧版)检查服务状态。
不同发行版安装命令对比
发行版系列 | 服务端包名 | 客户端包名 | 安装命令 |
---|---|---|---|
CentOS/RHEL | telnet-server | telnet | yum install telnet-server telnet -y (CentOS 7-)dnf install telnet-server telnet -y (CentOS 8+) |
Ubuntu/Debian | telnetd | telnet | sudo apt install telnetd telnet -y |
配置telnet服务
telnet服务通常通过xinetd
(超级服务器)或独立模式运行,多数传统Linux发行版(如CentOS 7、Ubuntu 16.04)默认使用xinetd
管理telnet服务,而新版系统(如CentOS 8+、Ubuntu 20.04+)可能需手动配置独立模式或启用xinetd
。
基于xinetd的配置(适用于CentOS 7、Ubuntu 18.04及以下)
-
检查xinetd是否安装:
# CentOS rpm -qa | grep xinetd # Ubuntu dpkg -l | grep xinetd
若未安装,需先安装:
yum install xinetd -y
(CentOS)或sudo apt install xinetd -y
(Ubuntu)。 -
修改telnet服务配置:
编辑/etc/xinetd.d/telnet
文件:vim /etc/xinetd.d/telnet
修改以下参数:
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no # 将“yes”改为“no”以启用服务 }
关键参数说明:
disable = no
表示启用telnet服务,默认为yes
(禁用)。 -
重启xinetd服务:
systemctl restart xinetd # CentOS 7+/Ubuntu 18.04+ # 或 service xinetd restart # 旧版系统
独立模式配置(适用于CentOS 8+、Ubuntu 20.04+)
新版系统可能不再默认支持xinetd
,需直接启动telnetd
服务:
-
安装telnet-server:确保已安装
telnet-server
(CentOS 8+为telnet-server
,Ubuntu 20.04+为telnetd
)。 -
创建systemd服务单元(若未自带):
创建文件/etc/systemd/system/telnetd.service
:[Unit] Description=Telnet Server After=network.target [Service] ExecStart=/usr/sbin/in.telnetd -l /bin/bash Restart=always [Install] WantedBy=multi-user.target
ExecStart
中的-l /bin/bash
指定登录后的默认shell,可根据需求修改。 -
启用并启动服务:
systemctl daemon-reload systemctl enable telnetd systemctl start telnetd
配置防火墙规则
telnet服务默认使用23端口,需确保防火墙允许该端口的入站连接,否则远程客户端无法访问。
CentOS 7+/RHEL 7+(firewalld)
# 永久开放23端口 firewall-cmd --permanent --add-port=23/tcp # 重新加载防火墙规则 firewall-cmd --reload # 验证端口是否开放 firewall-cmd --list-ports | grep 23
Ubuntu 18.04+/Debian 10+(ufw)
# 开放23端口 sudo ufw allow 23/tcp # 启用ufw(若未启用) sudo ufw enable # 查看规则 sudo ufw status
旧版系统(iptables)
# 添加规则允许23端口 iptables -A INPUT -p tcp --dport 23 -j ACCEPT # 保存规则(CentOS:service iptables save;Ubuntu:iptables-save > /etc/iptables/rules.v4)
防火墙配置命令对比
发行版 | 防火墙工具 | 开放23端口命令 | 查看端口状态命令 |
---|---|---|---|
CentOS 7+ | firewalld | firewall-cmd --permanent --add-port=23/tcp; firewall-cmd --reload |
firewall-cmd --list-ports |
Ubuntu 18.04+ | ufw | sudo ufw allow 23/tcp |
sudo ufw status |
CentOS 6/Ubuntu 14.04 | iptables | iptables -A INPUT -p tcp --dport 23 -j ACCEPT; service iptables save |
iptables -L -n | grep 23 |
启动telnet服务并设置开机自启
无论采用xinetd
还是独立模式,均需确保服务启动并开机自启,避免重启后服务失效。
基于xinetd的服务
# 启动xinetd systemctl start xinetd # 设置开机自启 systemctl enable xinetd # 检查服务状态 systemctl status xinetd
独立模式服务
# 启动telnetd systemctl start telnetd # 设置开机自启 systemctl enable telnetd # 检查服务状态 systemctl status telnetd
验证端口监听
使用netstat
或ss
命令检查23端口是否处于监听状态:
netstat -tuln | grep 23 # 或 ss -tuln | grep 23
若返回类似tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
的结果,表示telnet服务已正常监听。
测试telnet服务连接
本地测试
在本地终端执行:
telnet localhost 23
若成功,将显示登录提示(如Login:
),输入用户名和密码即可登录。
远程测试
在另一台机器上执行:
telnet <服务器IP> 23
若连接成功,说明telnet服务已正常开启,若失败,检查防火墙规则、服务状态及网络连通性。
安全注意事项
由于telnet协议采用明文传输,用户名、密码及所有通信内容均可能被窃听,因此需严格限制使用场景:
- 限制访问IP:通过防火墙仅允许特定IP连接23端口,
# firewalld仅允许192.168.1.100访问 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="23" accept" firewall-cmd --reload
- 避免在公网使用:仅在可信内网环境使用,禁止将telnet服务暴露于互联网。
- 替代方案:生产环境优先使用SSH(Secure Shell),默认端口22,支持加密传输,可通过
sudo apt install openssh-server
(Ubuntu)或yum install openssh-server
(CentOS)安装。
相关问答FAQs
问题1:开启telnet服务后,本地连接正常,但远程机器无法连接,可能的原因是什么?
解答:远程无法连接通常由以下原因导致:
- 防火墙未开放23端口:检查服务器防火墙(如firewalld、ufw、iptables)是否允许23端口入站连接,可通过
firewall-cmd --list-ports
或sudo ufw status
查看。 - telnet服务未启动:确认服务状态,
xinetd
模式需检查systemctl status xinetd
,独立模式检查systemctl status telnetd
。 - 网络策略限制:若服务器位于路由器或云平台(如阿里云、AWS),需检查安全组规则是否开放23端口。
- SELinux或AppArmor拦截:CentOS系统可临时关闭SELinux(
setenforce 0
)测试;Ubuntu系统检查AppArmor(sudo aa-status
)。
问题2:telnet和SSH的主要区别是什么?为什么推荐使用SSH?
解答:
- 加密方式:SSH(Secure Shell)采用非对称加密(如RSA)和对称加密传输数据,所有通信内容均加密;telnet采用明文传输,用户名、密码及命令均可被网络监听工具(如Wireshark)捕获。
- 端口与功能:SSH默认端口22,支持端口转发、隧道传输、X11转发等高级功能;telnet默认端口23,仅提供基础的远程登录功能。
- 安全性:SSH是IETF标准协议,经过多年安全验证;telnet因明文传输,存在严重安全隐患,已被大多数Linux发行版默认禁用。
- 兼容性:SSH客户端(如
ssh
命令)在所有现代系统广泛支持;telnet客户端因安全风险逐渐被淘汰,部分新系统需手动安装。
除非在特殊测试场景,否则应始终优先使用SSH进行远程管理。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15898.html