资讯动态

Linux安装telnet服务全攻略:从配置到排障一网打尽

发布时间:2026/10/20 15:14:58 来源:尧图企业网站定制
1. 项目背景与常见用途盘点说实话看到“linux安装telnet服务”这个标题我的第一反应是现在还用telnet的人不多了但凡是写这篇文章多半是因为实际工作里确实撞上了这个需求。我在日常运维和交付项目时遇到过几类典型场景这里先说清楚方便你对号入座。第一类是调试老设备。有些网络设备、嵌入式板卡、老型号存储设备管理接口只开放了telnet协议你不得不装一个客户端去连第二类是内网环境做端口连通性测试很多团队在排查“两台机器之间某个端口到底通不通”时第一时间想到的就是telnet命令第三类则是某些特定合规或教学环境需要提供telnet服务端比如做协议分析、给学员演示明文协议的危害。需要特别强调的是生产环境里用telnet做远程登录我是不推荐的密码和内容全部明文传输抓包就能看到。但在受控的内网测试环境、临时调试场景里它依然是个非常趁手的工具。这篇文章我会把服务端和客户端的安装、配置、启动、验证、排障全部走一遍覆盖常见发行版同时把我在实际环境中踩过的坑一并写给读者参考。适合谁来读如果是刚接触Linux的读者跟着步骤操作可以完成基础安装如果你已经有几年经验但没在内网环境专门配过telnet服务端可以重点看配置细节和排障思路。内容围绕“装起来、跑起来、能登录、能测试、能排查”这条主线不绕弯子。2. 安装前准备与协议基础2.1 telnet协议前世今生telnet是一个非常古老的远程终端协议从1969年诞生到现在已经跨越了半个世纪。它工作在TCP层默认端口23核心作用就是让用户通过网络连接到远程主机以字符终端方式执行命令。因为是纯文本协议所有交互内容不加密这也是它被SSH取代的根本原因。但从排障角度看telnet客户端恰恰因为“简单到极致”而不可替代它就是建立一个TCP连接然后把键盘输入原样发给对方把对方返回的字节原样显示出来。这个特性让它成为最直接的TCP端口连通性探测工具没有TLS握手、没有协议封装、没有多余交互你敲下一行命令就知道端口通不通。2.2 服务端与客户端的区别很多人第一次装telnet容易搞混telnet-server是服务端让你这台机器能被别人远程登录telnet是客户端让你这台机器能去连接别人的telnet服务。实际工作中客户端用得频率更高因为我们日常排障时经常拿它去连其他机器的22、80、443、3306等端口看通不通。如果只是测试端口连通性只需要装telnet客户端。如果要求别人能通过telnet登录这台机器才需要装telnet-server同时还需要一个守护进程来托管它常见的是xinetd在Debian系也有openbsd-inetd可选。2.3 发行版差异对照我在不同发行版上安装时总结了下面这个对应关系避免在错误的包管理体系里浪费时间操作系统服务端软件包客户端软件包守护进程CentOS / Rocky / AlmaLinux 7telnet-servertelnetxinetdCentOS / Rocky / AlmaLinux 8telnet-servertelnetxinetdUbuntu / Debiantelnetdtelnetopenbsd-inetd 或 xinetdopenSUSEtelnet-servertelnetxinetd还有一个容易被忽略的点很多发行版默认是不带telnet-server的需要额外配置软件源。比如Rocky Linux 9的AppStream源里虽然有但要确认epel是否启用我后面会专门讲。3. 详细安装步骤与配置说明3.1 基于CentOS / Rocky / AlmaLinux的安装RHEL系的操作系统是最常见的目标环境我以Rocky Linux 9为例CentOS 7的差异会在括号里说明。dnf install -y telnet-server telnet xinetd先装这三个包telnet-server提供服务端程序telnet是客户端xinetd负责把连接请求转发给telnet-server。安装完成后需要配置xinetd来管理telnet服务配置文件位置在 /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 }这里重点看两个参数disable必须为no表示启用服务server指向in.telnetd这个路径可以用rpm -ql telnet-server确认。配置完成后重启xinetd服务并设置开机自启systemctl restart xinetd systemctl enable xinetdCentOS 7上没有systemctl enable xinetd的需求时用chkconfig xinetd on也是一样的效果。我个人的建议是直接用systemctl因为RHEL 7之后service和chkconfig都只是兼容壳。3.2 基于Ubuntu / Debian的安装Debian系走另一套方案用telnetyd加openbsd-inetdapt update apt install -y telnetd openbsd-inetd安装完成后openbsd-inetd服务会自动读取 /etc/inetd.conf 配置文件并启动telnet服务。可以检查一下配置文件里是否有一行telnet stream tcp nowait telnetd /usr/sbin/telnetd这一行告诉inetd如果收到TCP连接请求就把连接交给/usr/sbin/telnetd处理。所以Ubuntu上启动telnet服务的方式是systemctl restart openbsd-inetd systemctl enable openbsd-inetd如果你更喜欢xinetd而不是openbsd-inetd也可以apt install xinetd然后参考上一小节的配置方式把disable设成no。我试过两种方式openbsd-inetd更轻量xinetd日志更丰富看个人习惯。3.3 验证安装结果安装后先别急着连用以下几条命令做基础验证rpm -qa | grep telnet dpkg -l | grep telnet ss -lntp | grep 23rpm或dpkg两条命令确认软件包已安装。ss -lntp则是关键一定要看到类似输出LISTEN 0 1 0.0.0.0:23 0.0.0.0:* users:((xinetd,pid...,fd...))如果ss没看到23端口监听说明服务端没被正确拉起这个问题在后面的排查章节展开。3.4 防火墙与安全组放行服务端启动但不代表外部能连接很多新手装好之后发现本机可以连、跨机连不上基本都是防火墙和安全组挡着。RHEL系默认用firewalld放行方式如下firewall-cmd --permanent --add-port23/tcp firewall-cmd --reload如果用iptables管理加一条规则即可iptables -A INPUT -p tcp --dport 23 -j ACCEPTUbuntu/Debian系经常用ufwufw allow 23/tcp这里有个细节我想提醒一下这台机器如果跑在云平台上云安全组的入方向规则也要放行TCP 23端口。本地防火墙、云安全组、系统服务三层都要通任何一层卡住都会表现为“连不上”。4. 服务连接与登录验证4.1 本机验证连接配置完成先在本机验证telnet服务端是否正常。本机验证可以排除防火墙干扰telnet 127.0.0.1 23如果一切正常会看到Trying 127.0.0.1...然后进入登录界面看到“login:”提示符输入一个系统里存在的账号和密码。如果出现下面这种提示说明服务没起成功telnet: connect to address 127.0.0.1: Connection refused本地都连不上先别急着看防火墙回查服务配置和监听状态。4.2 跨机器远程连接本机验证通过后从另一台机器发起连接telnet 192.168.1.10 23如果看到login提示符说明跨机器链路已经通了。这里要注意主机名解析、路由、防火墙都会影响连接所以建议先直接用IP测试避免DNS问题干扰判断。4.3 登录失败的关键点登录telnet服务时最常见的问题就是账号密码明明正确却提示Login incorrect。这种情况十有八九是PAM配置拦了路。绝大多Linux发行版的telnetd在登录时会调用PAM认证而有的系统默认策略会禁止root通过telnet登录或者要求用户必须属于特定组。如果你想允许root登录通常只在隔离测试环境中这么干生产环境不推荐需要改配置在 /etc/pam.d/remote 或 /etc/pam.d/login 文件中找到类似下面这行注释掉或配置相应策略auth required pam_securetty.sopam_securetty.so模块的作用是仅允许root在/etc/securetty列出的终端上登录默认列出的tty里通常没有telnet对应的虚拟终端。我当时的做法是如果非要用root登录先查看/etc/securetty是否配置了pts/0或直接注释掉这行PAM检查。再次强调这只是测试环境的临时做法生产环境绝不能让root直接用明文协议登录。还有一个容易踩的坑telnet服务使用系统账号认证那么用户必须拥有有效的shell比如/bin/bash。如果账号的shell被改成了/sbin/nologin或/bin/false即便密码正确也会被拒绝。可以用这个命令检查grep ^用户名 /etc/passwd4.4 并发连接与超时限制xinetd托管的telnet服务并发连接数默认有限制。如果你遇到超过一定数量后无法连接的情况可以调整/etc/xinetd.conf的instances参数或者直接在xinetd.d/telnet里加一行instances 50表示允许同时最多50个telnet连接。调整后重启xinetd生效。当然这只是并发限制每个连接长时间挂着也会占用文件句柄和进程资源onw参数可以设置空闲超时比如onw 300空闲超过300秒会断开连接这个配置在测试环境非常实用防止有人连续开着终端浪费资源。5. 端口连通性测试的高阶用法5.1 测试常用服务端口telnet客户端最实用的场景其实就是端口连通性测试。我平时排查架构里各组件之间网络通不通第一反应就是用telnet去连对方的端口判断是网络问题还是服务问题。例如测试Web服务80端口telnet 192.168.1.20 80连接成功后直接输入GET / HTTP/1.1 Host: 192.168.1.20按两次回车如果对方返回HTTP协议头说明Web服务网络层面是通的。想测试HTTPS的443端口也可以连接后敲一行HEAD / HTTP/1.1然后观察返回结果即可判断TLS端口是否可达。测试数据库端口也很典型比如MySQL的3306、Redis的6379、PostgreSQL的5432telnet 192.168.1.30 3306如果端口通MySQL通常会返回一个带特殊字符和版本信息的二进制头部Redis则会返回一个错误提示因为这些服务不会像telnet一样先把login界面给你。你不需要看懂全部内容只要连接没有被拒绝、没有超时就说明端口可达。5.2 测试端口的返回码解读用telnet测试端口结果无外乎三种现象含义处置方向Connection refused目标机器回包拒绝通常服务没监听或防火墙DROP后重置检查服务状态、监听端口连接超时网络路由不可达、云安全组或iptables直接DROP检查路由、防火墙策略、安全组进入协议交互端口可达服务正常响应进一步检查协议层问题这个表是我建议新手收藏的因为很多人看到Connection refused就以为是防火墙问题实际上一半情况是服务根本没起来。5.3 用telnet测试UDP端口行不行这里提前打个预防针telnet只能测试TCP端口。UDP协议没有连接概念telnet不支持也不应该用来测UDP。检测UDP端口连通性需要另外找工具比如ncnetcat的 -u 参数nc -uvz 192.168.1.40 161所以工作中注意分辨别把telnet硬套在UDP场景。6. 常见问题与排障实录6.1 服务端已装好但端口未监听这是最高频的问题表现为ss -lntp看不到23端口。排查思路按顺序执行先确认xinetd或inetd服务有没有启动systemctl status xinetd systemctl status openbsd-inetd没在运行就启动并确认enable。然后在确认配置文件里disableno有没有配错。有个细节值得注意在RHEL系安装时如果只装了telnet-server而不装xinetd你会发现ss里永远不会有23端口因为telnet-server依赖xinetd来监听和转发它本身不直接监听端口。这种情况不是服务坏了是缺了托管进程。6.2 本机连接正常但跨机器连不通本机能连说明服务端没问题问题出在网络链路上。从头到尾检查三层第一层目标机器自身防火墙确认firewalld/ufw放行23端口第二层云平台安全组或机房防火墙策略确认入方向TCP 23端口已放行第三层中间是否有网络ACL、网关策略限制。从源机器执行命令验证ping 目标IP如果ping通但telnet连不上多半就是端口放行问题。还有一种不起眼但真遇到过的情况源机器和目标机器在同一内网不同网段中间路由设备的入方向策略把23端口挡了这种需要网络管理员配合调整ACL。6.3 登录提示Login incorrect但密码确实正确这种情况非常迷惑人。先检查 /var/log/secure 日志RHEL系或 /var/log/auth.logDebian系找到对应时间戳的认证失败记录。我遇到过几次因素各不相同用户的shell不可用是一个原因/etc/pam.d/remote的PAM策略禁止了某个用户组是第二个原因还有一种是root的securetty限制也就是前面讲的pam_securetty模块问题。最稳的临时排障办法是新建一个普通用户来测试登录useradd testlogin passwd testlogin如果普通用户可以登录说明系统账号策略问题如果普通用户也登不进去则大概率是PAM公共配置里某个模块拦截了。6.4 连接被断开或瞬间退出登录成功后立刻被踢出这种情况往往跟limits或SELinux有关。排障优先看审计日志RHEL系执行ausearch -m AVC -ts recent | grep telnet如果看到SELinux拒绝记录尝试给telnet服务开启对应布尔值setsebool -P telnet_connect_all 1这个布尔值在部分版本上存在如果提示不存在用getsebool -a | grep telnet查看当前系统支持的布尔值列表然后针对性调整。如果不想深究SELinux策略临时调成permissive模式可以验证setenforce 0但记住这只是验证手段验证完要马上改回来。7. 安全加固与生产环境建议7.1 为什么生产环境不建议用telnet回到这个老生常谈的问题。telnet协议明文传输账号密码、命令输出、中间数据全程可被截获。在内网做测试没关系但放到生产环境、公网环境就等于把密码用明信片寄出去。所有做过网络抓包的人都懂telnet会话里的每一个字节都能直接看到。如果你的环境必须提供telnet服务有几个底线建议限制来源IP只允许特定管理网段访问不允许root直接登录telnet配合防火墙做最小化授权开启完整日志记录强烈建议只在隔离网段或者临时使用时开启用完后立刻关闭服务。7.2 更安全的替代方案日常运维中远程登录一律用SSHSecure Shell数据加密传输这是底线要求。如果只是为了端口连通性测试除了telnet还可以备选nc和nmapnc -vz 192.168.1.50 3306 nmap -p 3306 192.168.1.50两个工具都能完成端口探测其中nc可以快速判断TCP端口通断nmap还能识别服务版本。如果在某台机器上只装了nc没有telnet用nc替代测试完全没有问题。7.3 加固已验证的访问策略如果测试环境确实需要长期开着telnet服务我建议至少做这几件事第一把默认的23端口迁移到高位端口比如2323通过xinetd的port配置实现减少被扫描命中的概率第二在防火墙层写上源IP白名单其他地址一律DROP第三建立telnet专用账号并限制其权限不要给运维管理员级别的系统账号直接使用明文协议登录的权限第四记录好审计日志定期检查/var/log/secure或auth.log里的登录记录。8. 从零到可用的完整流程速查这里把整个流程整理成一份速查清单我每执行一次就会对照一遍省时有条理。步骤操作验证方式1. 安装服务端和客户端dnf install -y telnet-server telnet xinetdrpm -qa2. 配置xinetd编辑/etc/xinetd.d/telnetdisablenocat 配置内容核对3. 启动服务systemctl restart xinetdss -lntp4. 防火墙放行firewall-cmd 添加23端口并reloadfirewall-cmd --list-all5. 本机验证telnet 127.0.0.1 23进入login界面6. 远程验证telnet 目标IP 23进入login界面7. 检查登录系统账号尝试登录正常进入shell这个表格适合新环境交付时拿来一条条对照避免漏步骤。实际工作中我通常把1到4合并执行然后直接跳到第6步做远程验证有问题才回到前面逐步排查。我个人的习惯是每次在测试机配完telnet服务之后顺手在客户端执行一遍telnet测试目标端口把结果记录下来放进交付文档。这样做的好处是后续别人排查问题时能快速判断当时网络基线状态知道哪一段是通的、哪一段是后来断的。写了这么多其实核心就一句话telnet安装本身不难难的是理解它什么时候该用、什么时候坚决不用以及出了问题怎么快速定位。如果你只是需要端口连通性测试装个客户端就够如果你需要完整的远程登录服务装好服务端的同时一定要把防火墙、SELinux、PAM策略全部走一遍才能确保从任意客户端都能顺利登入。希望这篇内容能帮读者把安装和排障的路走直一些。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑