
简介这是一份面向虚拟化初学者的中文参考文档聚焦在 VMware 虚拟机环境下使用 telnet 远程登录 Linux 的操作要点常见于 Windows 主机与 Linux 虚拟机之间的远程管理场景。资源包仅包含1个 PDF 文件大小约34KB内容紧凑目前已有150人学习浏览。文档按排查顺序整理了完整链路先教会读者检查 telnet 与 telnet-server 是否安装并演示 rpm 包安装与验证再介绍 ntsysv 和修改 xinetd 配置两种启动方式以及 host-only、bridge、NAT 三种虚拟机网络模式下的连通性检查与 IP 设置思路随后给出防火墙放行 telnet 和解除 root 登录限制的方法。末段还补充了 SSH Secure Shell Client 的远程连接步骤并记录了一次真实的 telnet-server 安装排错过程可以帮助读者在 Windows 下远程管理 Linux 虚拟机时快速定位服务未启动、网络不通、防火墙拦截等常见问题。整份 PDF 体量小、按操作流程组织适合初学者边查边做、避免踩坑。1. Telnet 远程登录虚拟机里的 Linux先把四个前提对齐把宿主机和虚拟机当成两台物理机来看telnet 能不能通本质上就四件事Linux 里是否装了 telnet 服务端、服务端是否被 xinetd 拉起、防火墙是否放行 23 端口、网络是否真的能通。这四件事里任何一件没对齐你在 Windows 命令行敲telnet 192.168.x.x得到的都是连不上、超时、或者连上了又被秒断。这篇笔记整理了 Red Hat 9、CentOS 5.5 以及 Fedora 环境下的完整操作覆盖安装、启动、网络模式、防火墙和 root 登录限制适合运维入门、准备考试或者需要给虚拟机做远程登录实验的人。照着走一遍你就能在真实主机上稳定地把虚拟机里的 Linux 登进去。2. 服务端安装与启动telnet-server 不是默认装好的2.1 先分清 telnet-client 和 telnet-server很多人一开始就卡在“已经装了 telnet为什么还是连不上”因为telnet和telnet-server是两个包。前者是客户端只在命令行里发起连接后者才是服务端负责监听 23 端口。CentOS 5 这类系统默认自带客户端服务端通常要单独安装。判断方法很简单在虚拟机终端里执行rpm -qa | grep telnet如果只看到telnet-0.17-39.el5这类输出说明只有客户端要看到telnet-server-0.17-39.el5才是服务端也装了。Red Hat 9 时代用rpm -q telnet或rpm -q telnet-server分开查也一样。还有一种常见情况是查出来没有任何输出那说明客户端都没装更别提服务端了。另外要特别记住一点telnet 服务不是独立启动的守护进程它挂在 xinetd 下面由 xinetd 按需拉起。所以安装顺序是 xinetd 在前、telnet-server 在后。CentOS 5.5 默认连 xinetd 都没装直接装 telnet-server 会报依赖错误。2.2 两种安装路径光盘 rpm 包和 yum 在线安装有网络环境时在线安装最省事在 root 下执行yum install xinetd -y yum install telnet-server -y-y参数可以跳过交互确认比较适合脚本化操作。没有外网或者手里只有系统镜像盘的时候用光盘安装。CentOS 5.5 的 DVD 镜像里同时包含 xinetd 和 telnet-server 的 rpm 包不需要联网。挂载和安装步骤如下mkdir /mnt/cdr mount /dev/cdrom /mnt/cdr cd /mnt/cdr find . -name telnet-server*找到包后先拷贝到本地目录再安装避免在光盘目录里直接装出各种权限问题cp telnet-server-0.17-39.el5.i386.rpm /root/ rpm -ivh /root/telnet-server-0.17-39.el5.i386.rpmrpm -ivh中的i是 installv显示详细信息h显示进度条。如果之前已经装过旧版本要先用rpm -qa telnet-server确认版本再决定是否加--force强制覆盖。不同发行版的服务端包名略有差异Red Hat 9 的安装盘第三张里是telnet-server-0.17-25.i386.rpmFedora 时代可能是0.17-30认准文件名里的telnet-server字样就不会拿错包。2.3 修改配置文件并激活服务装完 telnet-server 后/etc/xinetd.d/telnet这个配置文件才会出现。这一步最容易翻车没装服务端之前去vi /etc/xinetd.d/telnet会提示文件不存在。配置文件的核心只有一处改动vi /etc/xinetd.d/telnet找到disable yes这一行改成disable no。修改完用:wq保存退出。文件里的其他参数保持默认即可常用的几个字段含义如下表参数含义建议值socket_type套接字类型stream流式 TCPwait是否单线程处理no允许多连接user服务运行身份rootserver服务程序路径/usr/sbin/in.telnetddisable是否禁用此服务改为 no修改完配置文件需要重新启动 xinetd 守护进程让变更生效service xinetd restart也可以用/etc/rc.d/init.d/xinetd restart效果一样。重启后用netstat -tunlp | grep 23查看端口是否在监听看到tcp 0 0 0.0.0.0:23就说明服务起来了。Red Hat 9 时代还有一个ntsysv字符界面工具在列表里给 telnet 打星号然后确定本质上也是操作 xinetd 的注册状态。完成这些后先在虚拟机本机上做个自测telnet localhost如果本地能连说明服务端配置没问题。出现登录提示后输入用户名密码能进到 shell 就说明服务端这条链路已经通了下一步把网络和防火墙的问题单独拎出来处理。xinetd 是 telnet 的父进程后续每次改动/etc/xinetd.d/telnet都要记得重启它这是很多人改完配置后连接仍然失败的常见原因。3. 虚拟网络与防火墙三种网络模式和 23 端口的配合3.1 虚拟机三种网络模式各自的 IP 配置方式虚拟机的网络模式直接决定了宿主机能不能找到它。VMware 下三种模式需要区分清楚NAT 最简单虚拟机通过 VMnet8 共享宿主机 IP 上网默认不用手动配 IPDHCP 会自动分配bridge 桥接模式是把虚拟机的网卡直接接到宿主机所在局域网虚拟机需要手动设置成和宿主机同一网段的 IP、网关和 DNShost-only 则完全隔离内外网需要把宿主机真实网卡设为共享并让虚拟机和 VMnet1 处于同一个网段。实际实验中最推荐 bridge 或 NAThost-only 经常因为共享设置不对导致链路不通。bridge 模式的配置大致是这样vi /etc/sysconfig/network-scripts/ifcfg-eth0需要确认几项内容BOOTPROTOstatic、ONBOOTyes然后配上IPADDR、NETMASK、GATEWAY、DNS1。比如宿主机 IP 是 192.168.1.18虚拟机就配 192.168.1.252子网掩码 255.255.255.0网关 192.168.1.1。配置完成后用service network restart或ifdown eth0 ifup eth0重启网卡。host-only 模式下宿主机、虚拟机、VMnet1 三者要构成一个封闭网络典型配置是宿主机共享后 VMnet1 为 192.168.0.1虚拟机配 192.168.0.100子网掩码都是 255.255.255.0。NAT 模式虽然不用配虚拟机 IP但从宿主机主动访问虚拟机时要注意NAT 默认只支持虚拟机往外发起连接宿主机往里访问需要端口转发这一点经常被忽略。3.2 防火墙放行 23 端口命令和规则落盘CentOS 5 默认启用了 iptables只放行 SSH 的 22 端口23 端口默认是拦的。很多人在这一步直接编辑/etc/sysconfig/iptables文件加规则然后service iptables restart结果还是不生效。原因通常是规则链写错位置或者匹配顺序不对我一般直接在命令行插入规则再保存更直观iptables -I INPUT -p tcp --dport 23 -j ACCEPT iptables -I INPUT -p udp --dport 23 -j ACCEPT service iptables save service iptables restart-I INPUT表示插入到 INPUT 链最前面TCP 和 UDP 两条都要加。--dport 23指定目标端口也就是 telnet 的默认端口。保存这条命令会把当前规则写进/etc/sysconfig/iptables重启后仍然有效。做过这些后可以用iptables -L -n | grep 23检查规则是否已存在。如果只是临时调试也可以直接停掉防火墙做对照实验确认到底是不是防火墙拦截service iptables stop telnet 192.168.1.252注意service iptables stop只在本次运行期间生效重启后防火墙会重新拉起来要想永久关闭需要执行chkconfig iptables off。做实验时先停防火墙验证通路通路后再精确放行 23 端口是定位问题最高效的做法。3.3 网络连通性的三段排查法网络是否真正连通不要用“感觉”用命令说话。第一段在宿主机上 ping 虚拟机 IPping 192.168.1.252能 ping 通说明二层以下链路没问题虚拟机网卡和宿主机能互相通信。第二段检查虚拟机自身的 23 端口是否在监听netstat -tunlp | grep 23如果没有任何输出说明 xinetd 或 telnet-server 没起来这不是网络问题而是服务没启动。第三段在宿主机上用telnet 192.168.1.252直接发起连接观察报错。如果提示No route to host通常是防火墙拦截或路由不通如果一直卡在Trying 192.168.1.252...则是端口不可达。三次操作可以排列组合出定位结论ping 不通先查 IP 和网络模式ping 通但端口没监听查服务ping 通且端口监听但连接被拒查防火墙规则和访问控制。把这三层剥开telnet 连不上的问题就已经被压缩到一个很小的范围了。4. 登不进去的真相pam_securetty、/etc/hosts 与访问控制4.1 root 登录被拒的机制和应急改法telnet 默认禁止 root 直接登录这是很多人首次使用时最困惑的地方明明用户名密码都对却提示 Login incorrect。原因是登录认证链中启用了pam_securetty.so模块它只允许 root 在列出的终端设备上登录而 telnet 伪终端不在其中。解决方案是编辑/etc/pam.d/login把auth required pam_securetty.so这一行注释掉vi /etc/pam.d/login # auth required pam_securetty.so保存后立刻生效不需要重启 xinetd。还有一种更粗暴的方式直接改掉 securetty 文件mv /etc/securetty /etc/securetty.bak这个文件是 pam_securetty 模块读取的 root 可登录终端列表备份改名后模块找不到文件校验就宽松了。但我不建议在实际环境里这么干telnet 本身是明文传输密码会裸奔在网络上root 账号再被放行相当于把大门钥匙放在门口垫子下面。更稳的做法是新建普通用户用 telnet 登录进去后再su - root切换。顺便说一个细节删除 securetty 文件后需要重新登录才生效已经打开的会话不会动态调整。另外 CentOS 5 里/etc/pam.d/login的文件路径如果找不到可以用grep -r pam_securetty /etc/pam.d/全局搜索有些发行版把这个调用放在其他认证文件里。4.2 连上就断/etc/hosts 反向解析问题有一种很典型的故障现象telnet 显示Connected to 192.168.1.87紧接着一行Temporary failure in name resolution: Illegal seek然后Connection closed by foreign host。看起来已经连上了但立刻被断开。这不是防火墙问题是服务端在对客户端做名称反向解析时失败。telnet 服务会尝试把客户端的 IP 解析成主机名如果 DNS 和 /etc/hosts 里都没有对应记录连接就会被终止。解决办法是编辑服务端的/etc/hosts把服务器自身的主机名映射补齐vi /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.1.88 pcname第二行的作用是把当前机器的实际 IP 和主机名对应起来这样反向解析能成功连接就不会被中断。需要说明的是这里的 pcname 应该是服务端自己的主机名不是客户端的很多资料在这点上写反了。执行hostname命令看到的输出就是需要写入 hosts 文件的主机名。写完重启 xinetd 后重新连一次即可。4.3 别忘了 hosts.allow 和 hosts.denyxinetd 体系下 telnet 还会受 tcp_wrapper 的访问控制也就是/etc/hosts.allow和/etc/hosts.deny两个文件。这两个文件的规则优先级是 allow 先于 deny也就是说先匹配 hosts.allow再匹配 hosts.deny。默认情况下两个文件里基本都是注释不限制任何访问。但如果你手动配置过比如在 hosts.deny 里写了一条ALL: ALL再想 telnet 进来就会被拒之门外。排查时可以查看这两个文件是否有可疑规则cat /etc/hosts.allow cat /etc/hosts.deny如果要放行某个网段在 hosts.allow 里加一行in.telnetd: 192.168.1.这表示允许 192.168.1.0/24 网段的客户端连接 telnet。特别注意点规则针对的是服务程序名也就是in.telnetd不是 telnet 这个单词。配置错误导致连不上的情况不少见。5. 从零到通的完整复现四个我踩过的 telnet 翻车现场5.1 完整操作链路从检查包到成功登录的七个步骤为了避免东一处西一处地找命令我把完整流程按顺序列出来每一步做完再做下一步rpm -qa | grep telnet yum install xinetd telnet-server -y chkconfig telnet on vi /etc/xinetd.d/telnet # 将 disable yes 改为 disable no service xinetd restart netstat -tunlp | grep 23检查 grep 结果确认 telnet-server 已装好chkconfig 让 telnet 随系统启动配置文件把 disable 翻转重启 xinetd 加载新配置netstat 确认 23 端口已监听。到这里服务端就绪。接着处理防火墙和网络iptables -I INPUT -p tcp --dport 23 -j ACCEPT service iptables save service iptables restart ping 192.168.1.252最后在宿主机命令行执行telnet 192.168.1.252输入普通用户名和密码能看到$提示符即登录成功。整个过程里最常出问题的位置就是 xinetd 没重启和 iptables 规则没保存这两步我会反复确认。5.2 踩坑一报错 No route to host现象宿主机执行telnet 192.168.1.87返回No route to host连接直接失败。这时ping 192.168.1.87可能能通也可能不通。原因防火墙拦截了 23 端口或者虚拟机网卡没配置好导致数据包路由不回去。CentOS 默认防火墙规则只放行 SSHtelnet 的 TCP 23 被丢弃客户端拿到 ICMP 错误消息后报 No route to host。这个报错很有迷惑性很多人第一反应是改 IP其实去查一下 iptables 就知道了。解决按 3.2 的命令插入 23 端口放行规则重启防火墙后重试。如果确认防火墙没问题检查虚拟机网卡是否与宿主机同网段用ifconfig查看虚拟机 IP 是不是配到别的网段去了。5.3 踩坑二name resolution 失败被断开现象telnet 显示连接成功紧接着跳出Temporary failure in name resolution: Illegal seek然后连接被关闭根本来不及输用户名密码。原因服务端无法反向解析客户端主机名。telnet 服务在做 getnameinfo 时如果 DNS 和 /etc/hosts 都查不到对应记录会直接拒绝会话。换句话说服务端连“你是谁也认不出来”所以干脆不让你进。解决在虚拟机的 /etc/hosts 里添加一行把服务器自身的 IP 和主机名映射写进去格式见 4.2。写完重启 xinetd 后重连故障即消失。这个方法对 CentOS 5 和 Fedora 都有效。5.4 踩坑三改完了 /etc/sysconfig/iptables 却不生效现象按照网上教程在/etc/sysconfig/iptables末尾手动添加了-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT重启防火墙后 telnet 依然超时。原因规则位置不对。CentOS 5 的 iptables 配置里RH-Firewall-1-INPUT 是自定义链尾部规则前的匹配顺序会把新到的数据包先匹配到其他 REJECT 规则。另外-A追加的位置在已有规则之后匹配机制按规则顺序执行前面的规则先拒绝后面加再多也没用。解决我一般不在文件里手改直接用命令iptables -I INPUT -p tcp --dport 23 -j ACCEPT插入到链首再service iptables save落盘。如果一定要编辑文件就把这行加在链定义之后、其他规则之前确保 telnet 数据包先被接受而不是先被拒绝。5.5 踩坑四telnet-server 装了但找不到配置文件现象rpm -qa | grep telnet-server有输出但vi /etc/xinetd.d/telnet报文件不存在服务也起不来。原因telnet-server 装好后配置文件是由 xinetd 自带的目录提供的如果 xinetd 没先装/etc/xinetd.d 目录可能都不存在。CentOS 5.5 默认没有 xinetd只装 telnet-server 的话rpm 会报依赖错误但某些强制安装的场景下包能装上配置文件却始终缺失。解决排除依赖问题的方法是先装 xinetd 再装 telnet-server。已经装错的情况下把 telnet-server 卸载重装rpm -e telnet-server yum install xinetd telnet-server -y装完确认/etc/xinetd.d/telnet存在再继续改配置。这个坑可以避免做法是安装后第一时间用ls /etc/xinetd.d/看一眼目录内容而不是直接跳过验证去改配置。6. 连进来之后telnet 会话里的几个实用习惯登录成功后telnet 会话里有一套自己的操作方式跟本地终端有些差异。首先是退出登录输入exit或logout注意不是直接关窗口否则服务端的进程会残留。其次telnet 会话支持一个特殊转义符Ctrl]按下后会进入 telnet 命令模式输入quit退出整个连接输入?查看支持的命令列表。这个转义符在网络链路异常时很好用比如会话卡死时先按Ctrl]回到命令模式再输入quit强制断开比直接关闭 PowerShell 窗口更干净。在远程维护的思路上telnet 有两个天然短板明文传输和端口易被扫描。在生产环境里我会直接换成 SSHCentOS 5 下启动 sshd 服务即可。但做成教学实验或者内网调试时telnet 的价值在于协议简单、依赖少、故障点透明适合拿来练手网络排查。从那以后我每次远程登录实验前都强制自己先走一遍检查清单rpm -qa | grep telnet确认服务端、service xinetd restart确认服务状态、iptables -L -n | grep 23确认防火墙、ping确认链路。这一步提前做完后面基本不会出幺蛾子。希望这条流程能帮你在自己的虚拟机环境里少走几次弯路。本文还有配套的精品资源点击获取