news 2026/10/5 7:11:31

Telnet连接虚拟机Linux:从网络配置到自动化登录实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Telnet连接虚拟机Linux:从网络配置到自动化登录实战

简介:在虚拟机中通过telnet远程登录Linux,常会遇到服务未启动、网络不通、防火墙拦截等问题,这份PDF即围绕这些常见故障,整理出一套可落地的参考指南。资源共1个PDF文件,大小约34KB,篇幅紧凑但步骤完整,适合Linux初学者和需要快速配置远程登录的运维人员参考。已有150人学习,内容来自实际测试环境,针对性较强。指南先说明了telnet与telnet-server软件包的检查与安装,接着介绍启动服务的两种方式:利用ntsysv勾选telnet或直接修改xinetd.d/telnet配置文件中的disable参数;同时针对虚拟机网络,分别梳理了host-only、bridge、NAT三种模式的IP设置,以及用ping命令验证连通性的方法。对常见的防火墙阻挡问题,给出了开放23端口和关闭防火墙两条处理路径;还涉及root无法远程登录时的PAM配置调整,并补充了SSH Secure Shell Client的远程连接和文件传输用法,整体实用价值较高。

1. 还在用telnet连虚拟机里的Linux?这场景比你想的实在

这两年谈远程登录,满屏都是SSH,telnet被当成老古董。可真的上手运维,就会发现虚拟机里的Linux系统并不总是那么“现代”:有的是为了复现老环境装的CentOS 6,有的是精简到连SSH服务都没装的嵌入式镜像,还有的是内网实验台里临时拉起的虚拟机,手头没有密钥、只有用户名密码。这种时候,telnet是唯一不需要预配密钥、装上就能用的远程登录协议。它把每一步交互都以明文摆在网络上,安全性确实差,但在隔离的虚拟机网络里,换来的是极低的依赖和几乎为零的排错成本,这也是很多老运维至今留着telnet习惯的原因。

这套方案能解决的问题很具体:宿主机装上telnet客户端,虚拟机里的Linux开启telnet服务,两边网络能通,然后一条命令登进去做配置、跑命令、查日志。本文按“网络准备→服务开启→连接配置→故障排查→自动化利用”的顺序展开,适合三类人:刚接触虚拟机的小白、要在内网临时登录Linux的开发者,以及需要批量巡检虚拟机的运维。标题里那份PDF参考要表达的无非就是这条链路,我按实操细节把它重新讲一遍,参数和坑都放在前面。

2. 先把虚拟机网络和服务备好:网络模式、静态IP与telnet服务开启

2.1 网络模式决定你从哪边连:桥接、NAT、仅主机怎么选

虚拟机能不能被宿主机telnet到,第一道关卡不是服务,而是虚拟机的网络模式。VMware Workstation(以及VirtualBox里对应叫法)给虚拟机提供三种常见网络模式,它们在连通性上的差异非常大。桥接模式下,虚拟机被当成宿主机所在局域网里的一台独立机器,直接占用一个和宿主机同一网段的IP,宿主机当然能访问,局域网里其他机器也能访问。NAT模式下,虚拟机走的是VMware自建的私有网段(比如vmnet8,常见网段是192.168.x.0),宿主机在这个网段里有一个虚拟网卡地址,因此宿主机能访问虚拟机,但外部物理机默认访问不到。仅主机模式最封闭,虚拟机只能和宿主机通信,完全无法访问外网,适合做纯隔离调试。

如果你只是希望“宿主机能telnet进虚拟机”,NAT和仅主机其实都够,但有个重要区别:NAT模式下虚拟机可以通过宿主机上网,装软件、拉依赖包方便;仅主机模式下虚拟机是断网的,只能靠挂在宿主机上的镜像或离线包来装服务。桥接模式虽然最接近真实环境,但受路由器DHCP影响,虚拟机IP可能漂移,一旦IP变了,telnet地址就得跟着改。我的建议是:实验环境选NAT,固定好虚拟机IP;纯安全测试选仅主机;需要局域网内多人访问虚拟机才选桥接。

网络模式宿主机能否访问虚拟机虚拟机能否访问外网局域网其他机器能否访问虚拟机典型场景
桥接能能能模拟真实服务器、多人联调
NAT能能(经宿主机)默认不能单机开发、装软件方便
仅主机能不能不能安全测试、隔离调试

选定模式后,在VMware里给虚拟机分配一个固定IP的常用做法有三种:DHCP保留、虚拟机内静态配置、桥接下绑定MAC。最可靠的是虚拟机内静态配置,后面小节会展开。这里我多提醒一句:如果你在VMware里把虚拟机网络模式从NAT切到桥接,虚拟机网卡的配置里如果还写着旧网段的静态IP,就会产生“网卡起来了但ping不通网关”的现象,排查时要记得先看模式。

2.2 给虚拟机里的Linux设置静态IP:不再每天被DHCP闪瞎

telnet连接的目标是IP,所以先让虚拟机的IP稳定下来。登录虚拟机Linux(本地用控制台也行,或者先连着SSH),第一步先用ip addr看当前网卡名和地址。CentOS/RHEL系列的网卡常叫ens33或ens160,Ubuntu常见是ens33或eth0。看清网卡名后,编辑对应的配置文件。

以CentOS 7.9为例,配置文件的路径是/etc/sysconfig/network-scripts/ifcfg-ens33。编辑前建议先备份一份,避免改错后回不去:

# 备份原配置,如果改坏了可以 cp 回来 cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak # 编辑网卡配置 vim /etc/sysconfig/network-scripts/ifcfg-ens33

把文件内容调整为如下关键项(其他项保留即可):

BOOTPROTO=static ONBOOT=yes IPADDR=192.168.8.128 NETMASK=255.255.255.0 GATEWAY=192.168.8.2 DNS1=223.5.5.5

在NAT模式下,IPADDR要在vmnet8网段里选一个没被占用的地址,GATEWAY通常是VMware NAT网关(默认是.2,可以在VMware的“虚拟网络编辑器”里看到)。桥接模式下,GATEWAY填你路由器的LAN地址(比如192.168.1.1),IPADDR则选一个网段内空闲地址。改完后重启网络服务:

systemctl restart network # 验证IP是否生效 ip addr show ens33 # 验证网关是否通 ping -c 3 192.168.8.2

Ubuntu 18.04及以后版本用的是netplan,配置文件在/etc/netplan/下,常见文件名为00-installer-config.yaml或者50-cloud-init.yaml,编辑时要注意YAML缩进,一个空格错了就会导致应用失败:

# 编辑netplan配置,替换为自己的网卡名 sudo vim /etc/netplan/00-installer-config.yaml

内容示意:

network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.8.128/24 routes: - to: default via: 192.168.8.2 nameservers: addresses: [223.5.5.5]

应用netplan配置用sudo netplan apply,然后同样用ip addr验证。这里有个很常见的坑:修改配置文件时把ONBOOT=no留着忘了改,或者Ubuntu的dhcp4没改成no,重启后IP还是漂移的。修改完一定要做一次完整的重启验证,不能只看当前生效。

2.3 安装并启动telnet服务:别只看systemctl,还要处理root登录限制

虚拟机侧的telnet服务端装好后,才能被远程连接。CentOS系列在7以前,telnet服务由telnet-server包提供,安装后通常由xinetd托管;CentOS 7及更高版本改成了telnet.socket,由systemd直接管理。实际安装命令如下:

# CentOS/RHEL 7/8/9 yum install -y telnet-server telnet # 启用并启动telnet.socket(CentOS 7之后没有telnet.service了) systemctl enable telnet.socket systemctl start telnet.socket # 查看监听端口 ss -ltn | grep 23

Ubuntu/Debian使用telnetd,由openbsd-inetd托管:

# Ubuntu/Debian apt-get update apt-get install -y telnetd telnet systemctl enable openbsd-inetd systemctl restart openbsd-inetd # 确认端口监听 ss -ltn | grep 23

安装后如果ss -ltn | grep 23没有任何输出,先停掉防火墙再看,很多时候只是防火墙拦了。如果虚拟机是完全离线的,不能在线yum install,我一般的做法是:把对应版本的系统安装ISO挂载到虚拟机光驱,然后配置本地yum源。CentOS 7的离线安装可以这样:

mkdir -p /mnt/cdrom mount /dev/cdrom /mnt/cdrom # 创建本地repo文件 cat > /etc/yum.repos.d/local.repo <<EOF [local] name=local baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 EOF yum clean all yum install -y telnet-server telnet

这里gpgcheck=0是跳过GPG签名校验,生产环境不要这样用,离线实验倒是能省很多麻烦。另外,telnet默认会拒绝root用户直接登录,原因是/etc/securetty里只保留了一些物理终端设备名。如果你需要root登录,可以把pts/0到pts/3加到/etc/securetty里,但更稳妥的办法是先用普通用户登录,再su - root切过去。相比之下,我更推荐后者,因为telnet是明文协议,root密码明文暴露风险太大。

3. 从宿主机发起telnet连接:命令参数、终端类型与退出方式

3.1 最简单的一行命令 telnet IP 与何时需要加端口

宿主机装好telnet客户端后,连接虚拟机Linux最基础的命令是telnet 192.168.8.128,telnet客户端默认会尝试连接对端的23端口。如果服务端监听的是标准23端口,写不写端口都一样。但telnet命令另一个非常重要的用途是连接任意TCP端口做调试,此时必须显式给出端口号,比如telnet 192.168.8.128 8080。

# 用默认23端口连接 telnet 192.168.8.128 # 显式指定端口,这也是测端口连通性最常用的写法 telnet 192.168.8.128 23 # 指定登录用户名,直接进入密码输入阶段 telnet -l myuser 192.168.8.128

第一次连上后,终端会提示输入用户名和密码。这里有一点新手很容易误会:输入密码时屏幕没有任何反馈,光标不动,这不是卡死,而是telnet会话本身不显示密码字符。输入完直接回车即可。登录成功后,你会进入虚拟机的shell,可以执行ls、df -h、systemctl status这些常见命令。断开连接时直接exit或者Ctrl+D,如果某次shell卡住了,按Ctrl+]进入telnet命令模式,输入quit回车,这是最干净的退出方式。

3.2 常用参数:-l 指定用户、-a 自动登录、-d 调试模式

telnet客户端的参数比很多人想象的要多,日常连接除了裸命令,常用的就这么几个:

参数功能使用示例
-l 用户名指定登录用户名,免去输入用户名的等待telnet -l myuser 192.168.8.128
-a尝试自动登录,配合-l使用,或使用环境变量USERtelnet -a -l myuser 192.168.8.128
-d调试模式,把字节流和状态变化打印出来telnet -d 192.168.8.128 23
-e 字符设置转义字符,默认是Ctrl+]telnet -e x 192.168.8.128

调试模式-d在连接失败时很有用,它会输出类似TH_OPEN、Trying...以及连接被拒绝的错误码,能帮你判断是网络层的问题还是服务端根本没监听。-e参数一般用不到,但如果你在终端环境里Ctrl+]被其他程序抢占,可以临时换个转义字符。

需要特别提醒的是,-a自动登录依赖服务端支持自动登录机制,很多Linux发行版的telnet服务端默认并不允许,会重新给出login:提示。所以别指望telnet -a能像SSH免密一样顺滑,脚本自动化时还是用expect更可靠。

3.3 登录后的终端交互:设置终端类型、执行命令、正确退出

telnet登录成功后,终端通常会出现一个提示,要求你选择终端类型,常见的选项有vt100、vt220、ansi、linux。直接回车默认就是vt100,多数情况下够用。如果你发现登录后clear无法正确清屏、top界面错位,大都是终端类型不匹配,此时可以退出后用TERM=linux telnet ...这种方式启动连接,或者登录后手动执行export TERM=linux和export TERM=DUMB来调。

交互期间,telnet会话有点像串口终端,不支持SSH那样的窗口尺寸自动同步。在虚拟机里跑需要全屏刷新的命令(如htop、vim)时,列数和行数可能不对,视觉上会很难受。我一般在虚拟机上提前把/etc/profile里加一行export TERM=vt100,让每个telnet登录的用户都使用固定终端类型,这样至少能让vim正常使用。至于退出连接,exit退出shell后telnet客户端一般会自动关闭;如果shell已经退出但客户端还停留在Connection closed by foreign host.这类提示,直接回车即可回到宿主机命令行。强行用Ctrl+C关掉telnet进程并不优雅,可能让服务端的进程变为僵尸,所以记住Ctrl+]然后quit这个标准流程准没错。

3.4 宿主机是Windows/macOS怎么办:开启Telnet客户端或使用第三方工具

如果你用的是Windows 10/11,默认是没有telnet命令的,直接敲telnet会提示不是内部或外部命令。原因是Windows默认不安装Telnet客户端。开启方式有两种:一是去“设置”→“应用”→“可选功能”→“添加可选功能”里搜索“Telnet客户端”并安装;二是在管理员PowerShell里执行一条命令:

# 管理员身份运行PowerShell,安装Telnet客户端 dism /online /Enable-Feature /FeatureName:TelnetClient

安装完成后,在PowerShell或CMD里就能正常使用telnet了。如果不想装系统组件,也可以用PowerShell自带的Test-NetConnection 192.168.8.128 -Port 23来测试端口连通性,但那个命令没法做交互式登录,只能作为探测工具。

macOS自带telnet客户端,不过从macOS 12 Monterey起,系统附带的是telnet的BSD实现,部分版本可能默认没有。如果提示command not found,直接装一个:

# 需要先安装Homebrew brew install telnet

另外,Windows也经常有人直接用MobaXterm、SecureCRT这些工具连接telnet,界面里选择telnet协议,填入IP和端口就能用。我个人的习惯是纯命令行场景就用系统telnet,要保存多台虚拟机登录信息才用MobaXterm这类工具。工具只是载体,连接参数和服务端配置才是一致的。

4. 避坑合集:telnet连虚拟机的六类常见故障与排查顺序

4.1 连接超时或提示Connection refused:先ping,再看服务端口

现象:宿主机执行telnet 192.168.8.128后,一直停在Trying 192.168.8.128...,最后输出Connection timed out;或者瞬间显示Connection refused。前者一般是网络路径不通,后者多半是能到虚拟机但对应端口没有服务。

原因分析:超时通常发生在虚拟机IP不通、网络模式不对、宿主机与虚拟机不在同一网段这三种情况。拒绝则几乎可以确定telnet服务没起来,或防火墙直接返回了RST。

解决步骤按照从底层到上层的顺序:

# 第一步:在宿主机ping虚拟机IP,确认网络可达 ping -c 4 192.168.8.128 # 第二步:如果ping不通,检查虚拟网络模式和虚拟机内IP配置 # 第三步:如果ping得通但telnet refused,登录虚拟机(或通过VMware控制台)检查服务监听 systemctl status telnet.socket ss -ltn | grep 23

如果ss没有输出23端口,则说明服务没起来或socket没有激活。CentOS 7里常见的坑是忘掉systemctl start telnet.socket,或者启用了但没生效。执行完systemctl start telnet.socket后再用ss -ltn | grep 23确认一次,这是最快的验证手段。

4.2 能显示登录提示,但输完密码就断开

现象:telnet连上后出现login:,输入用户名出现Password:,输入密码回车后,连接立刻关闭或返回Connection closed by foreign host.。

原因:这是telnet服务端最常见的认证失败表现。主要原因是PAM配置限制,或者用户密码在/etc/shadow里被标记为不可登录(比如密码过期)。另一个常见原因是root用户登录被/etc/securetty拦截,但那通常是直接拒绝,不会断开连接。

解决:先在虚拟机本地控制台或通过SSH登录,检查用户状态:

# 查看用户shell和密码状态 getent passwd myuser # 查看密码是否过期,chage -l 输出中的过期时间 chage -l myuser # 临时重置密码 passwd myuser

如果用户本身没问题,再检查PAM相关配置。CentOS里可以这样排查:

# 查看认证日志 tail -f /var/log/secure # 再次尝试telnet登录,观察日志输出

日志里如果出现pam_unix(telnet:auth): authentication failure,通常就是密码输入错误或者用户被锁定。如果出现Account has expired,则需要用chage -E -1 myuser解除过期。记住,telnet发送的密码虽是明文,但服务端验证逻辑和本地登录走的是同一套PAM,本地能登录的用户,telnet才有可能登录成功。

4.3 提示“No route to host”

现象:宿主机telnet时,很快提示No route to host。

原因:这个错误有两个常见来源:一是宿主机和虚拟机之间确实没有路由路径,比如虚拟机选择了仅主机模式,而宿主机没有启用对应虚拟网卡;二是虚拟机防火墙拦截了入站连接,并返回ICMP不可达消息。

解决:先确认虚拟机网络模式,在VMware里“虚拟机”→“设置”→“网络适配器”,看当前是NAT还是桥接。如果是仅主机,宿主机必须有一块VMnet1网卡且有IP;如果宿主机没有VMnet1地址,可以打开“虚拟网络编辑器”重新配置。然后检查虚拟机防火墙:

# CentOS 7/8 查看防火墙是否开启,23端口是否放行 firewall-cmd --state firewall-cmd --list-ports # 临时放行23端口(重载后失效) firewall-cmd --add-port=23/tcp # 长期放行 firewall-cmd --permanent --add-port=23/tcp firewall-cmd --reload

Ubuntu用ufw时,执行ufw allow 23/tcp。如果不开防火墙策略但想快速验通,临时关掉防火墙systemctl stop firewalld(CentOS)或systemctl stop ufw(Ubuntu)也可以,不过记得验证完恢复。

4.4 密码输入不显示、退格键变成乱码

现象:登录时输入密码看不到字符,这其实是正常的telnet行为。但有些初学者按下退格键想纠正密码,结果屏幕出现^H,后面输入的内容全乱套。

原因:telnet的NVT线路规程没有像SSH那样处理终端行编辑,退格键在部分终端配置下被解释成普通字符^H,而服务端shell又没有正确的erase设置。

解决:为了避免输错密码,用户在输入密码前要一次性在脑子里想好,输错了就回车重来。登录后进入shell,如果退格键不能用,执行下面两个命令修复:

# 设置erase字符为退格 stty erase ^H # 设置终端类型 export TERM=vt100

如果^H不生效,试试stty erase ^?,因为不同终端的退格键编码不一样。这个问题在XShell、Putty里一般不出现,但在系统自带终端和telnet的组合下很常见。把这两行写进/etc/profile,或者~/.bashrc里,能省去后续很多麻烦。

4.5 中文显示为乱码

现象:在虚拟机里执行cat查看中文文档,或者运行输出中文的程序,telnet终端上一片乱码。

原因:telnet本身不负责字符编码转换,完全依赖两端locale一致。如果虚拟机locale是zh_CN.UTF-8,而宿主机终端是GBK,或者反过来,必然乱码。这是telnet这类老协议最让人无奈的坑。

解决:最简单的办法是让两端都统一为UTF-8。先看虚拟机当前语言:

# 查看当前locale locale # 临时设置为UTF-8 export LANG=en_US.UTF-8 # 永久设置,写入 /etc/locale.conf(CentOS)或 /etc/default/locale(Ubuntu)

宿主机如果是Windows,CMD默认代码页可能是936(GBK),执行chcp 65001切到UTF-8后再telnet;如果是PowerShell,先执行[Console]::OutputEncoding = [System.Text.Encoding]::UTF8。macOS终端默认UTF-8,基本无碍。如果乱码出现在程序输出里,且程序内部没有指定编码,那就只能改程序或换终端工具了。还有一个土办法:在虚拟机里用sed 's/[\xe4-\xe9][\x80-\xbf][\x80-\xbf]/?/g'之类的命令把非UTF-8字符过滤掉,但那是应急,不是正道。

5. 把telnet当调试工具:端口连通性探测与自动批量登录

5.1 用telnet测端口通不通:不是只能连23

telnet的价值远不止登录Linux。任何一个TCP端口都可以用telnet去“握手”,因为telnet客户端本质上就是一个随时可以指定端口的TCP连接工具。测试远端端口是否开放,最直白的命令是:

# 测某台虚拟机的8080端口是否开放 timeout 3 telnet 192.168.8.128 8080

如果端口开放,屏幕要么显示一片空白,要么出现服务端返回的banner(比如HTTP服务会返回带Server头的响应);如果端口关闭,则立即显示Connection refused。加上timeout 3是为了防止端口虽然可连但服务端不返回任何数据时,telnet客户端一直挂在那里。这个技巧在排查nginx、MySQL、Redis等服务是否正常监听时非常好用,比nc -vz更直观,而且很多Windows机器上telnet客户端是通用的。

配合telnet的-d调试参数,可以看到连接建立和关闭的状态变化。比如你要确认虚拟机某个端口是不是被防火墙拦了,telnet -d 192.168.8.128 3306会输出TH_DEST等状态,配合抓包工具,基本能定位到是哪一层丢弃的。生产环境我还是推荐用nc -zv或者nmap,但那两个工具不是所有机器都有,而telnet客户端只要Windows功能里勾一下就能有,通用性反而更好。

5.2 用expect脚本自动登录,省去重复劳动

连很多台虚拟机时,手动输密码非常耗时,expect脚本可以承担这个重复劳动。expect是一个专门处理交互式程序的工具,它监听子进程的输出,匹配到关键字后发送预设的输入。下面这个脚本可以从宿主机自动telnet登录虚拟机,然后执行uname -a并退出:

#!/usr/bin/expect # 自动telnet登录虚拟机的示例脚本 set ip 192.168.8.128 set user myuser set pass mypass spawn telnet $ip # 等待login提示,5秒没出现则报错 expect { "login:" { send "$user\r" } timeout { puts "连接超时"; exit 1 } } # 等待密码提示 expect "Password:" send "$pass\r" # 等待shell提示符(这里用$匹配,需注意正则转义) expect "\$ " send "uname -a\r" expect "\$ " send "exit\r" expect eof

脚本里我特意写了超时处理,因为telnet登录首先会有一个协议协商过程,如果虚拟机繁忙或网络慢,登录提示可能迟迟不出来。没有超时机制的话,脚本会挂死在那里。运行脚本前要先安装expect:

# CentOS安装expect yum install -y expect # Ubuntu安装expect apt-get install -y expect

运行:expect telnet_login.exp。注意脚本里的密码是明文,千万不要把它提交到公共仓库。我自己的习惯是把密码放在脚本外,通过环境变量传入:

#!/usr/bin/expect set ip [lindex $argv 0] set user [lindex $argv 1] set pass [lindex $argv 2] # 调用方式:expect telnet_login.exp 192.168.8.128 myuser mypass

这样脚本本身不携带真实口令,命令行参数由你临时指定,安全一些。expect匹配shell提示符时,$要写成\$,因为expect的匹配用了Tcl正则。如果你登录后看到的提示符是#(root用户),匹配串要改成#,否则脚本会一直等。

5.3 批量巡检多台虚拟机:shell+expect循环

如果你在维护多个虚拟机,telnet批量巡检的场景很实在:登录每台机器,执行相同的命令(比如查磁盘、查负载),把结果汇总。一个常见的做法是在shell里循环调用expect脚本:

#!/bin/bash # 批量telnet巡检虚拟机,前提是expect脚本已就绪 hosts="192.168.8.128 192.168.8.129 192.168.8.130" user="myuser" pass="mypass" for ip in $hosts; do echo "===== $ip =====" expect -c " set timeout 5 spawn telnet $ip expect \"login:\" { send \"$user\r\" } expect \"Password:\" { send \"$pass\r\" } expect \"\$ \" { send \"df -h | head -5\r\" } expect \"\$ \" { send \"uptime\r\" } expect \"\$ \" { send \"exit\r\" } expect eof " done

这个写法把expect逻辑直接嵌在-c里,省去了单独的期望文件。注意在bash向expect -c传字符串时,所有内层引号都要用反斜杠转义,双引号内出现的$也要小心被bash先展开,所以上面的密码我故意写成了直接量,实际使用中更要谨慎。若某台机器不通,set timeout 5会让expect在没有任何匹配时5秒后结束,避免整个巡检卡死。

恢复现场也很重要:巡检完成后,把这些脚本放在一个有执行权限的目录里,并在脚本末尾删除历史记录或做日志归档。telnet的脚本化自动化只能用在受控内网,一旦涉及跨公网的远程登录,千万不要用telnet裸奔,这个底线我在下一章还会再强调。

6. 一个值得养成的习惯:telnet登录后先做三件事,再想ssh替代

telnet连上虚拟机,做完事就退出,这容易漏掉安全隐患。我给自己定的规矩是:每次telnet登录后,第一件事依次执行who、last、history,快速确认当前会话、最近登录记录和命令历史。who能让你知道这台虚拟机此刻还有谁在线,last能看到之前哪些IP登录过,history则检查有没有被塞进可疑命令。这三条命令加起来不到3秒,但很多异常登录的苗头都能在这3秒里暴露出来。

第二件事是限制会话的空闲时间。telnet会话挂在那里不关,等于给路过的连接开着门。可以在虚拟机上设置TMOUT环境变量,让shell在N秒无操作后自动退出,这个做法尤其适合调试完忘记退出的情况:

# 在 /etc/profile 里追加,300秒无操作自动退出 echo 'export TMOUT=300' >> /etc/profile source /etc/profile

第三件事是记录这次telnet是从哪个宿主机IP连过来的,写入自己的运维笔记。telnet没有SSH那样的审计日志友好,默认只记录登录事件,不记录每一条命令,所以手动记一笔很有必要。我以前在一台测试虚拟机上用telnet调试防火墙策略,忘了关会话,第二天发现测试网络里多了一台跳板机的登录记录,才意识到这台机器被扫了。虽然后来确认是同事在联调,但从那以后我就养成了登录后先看会话、设TMOUT、记来源IP的习惯。

生产环境里,只要虚拟机内核支持,能装SSH就尽早装SSH。telnet适合内网临时救急,不适合承载持续性的管理通道。你完全可以在虚拟机里同时开着SSH和telnet,日常操作走SSH,排查某些老协议问题时再开telnet。如果有一天你发现自己在一个环境里只能用telnet,第一反应应该是思考为什么SSH起不来,而不是庆幸telnet还能用。希望这套从网络配置、服务启动到故障排查和脚本化的流程,能帮你把telnet这个老工具在虚拟机的世界里用得顺手且心里有底。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 7:11:27

智能体一句话生成数据分析结果:内置Gemini-3实测详解

前段时间看到“又一个王炸&#xff01;这个智能体一句话生成数据分析结果&#xff0c;内置Gemini-3免费用”这种标题&#xff0c;我第一反应是营销号又在整活了。但最近手上正好有一批渠道销售数据要快速出结论&#xff0c;就顺手实测了一下这款智能体。结果有点打脸——从丢进…

作者头像 李华
网站建设 2026/10/5 7:11:11

YOLOv11实战:工业零件表面缺陷检测从零到部署

简介&#xff1a;面向工业质检工程师、目标检测算法研究者及智能制造入门学习者&#xff0c;这份基于YOLOv11的零件表面缺陷检测实战教程&#xff0c;以36页篇幅系统覆盖从理论到落地的完整链路&#xff1a;从YOLO系列演进历程、YOLOv11整体架构与锚框机制、损失函数等核心原理…

作者头像 李华
网站建设 2026/10/5 7:10:23

深入理解HBase分布式存储协议:架构原理、核心链路与生产实践

做大数据平台这几年&#xff0c;我见过太多人把HBase当普通KV数据库用&#xff1a;写代码调API贼溜&#xff0c;但一问到底层存储协议是怎么回事&#xff0c;就支支吾吾。一旦集群出问题&#xff0c;比如读写超时、Region卡住、节点宕机后恢复慢&#xff0c;就完全不知道从哪里…

作者头像 李华
网站建设 2026/10/5 7:10:20

Redis核心应用场景实战:缓存、分布式锁、集群与性能优化

聊到 Redis 核心应用场景&#xff0c;后端的第一反应通常是“缓存”&#xff0c;但缓存只是它能力的入场券。我在前后端都折腾过的这几年&#xff0c;Redis 在项目里承担过分布式锁、排行榜、附近的人、幂等记录、队列削峰&#xff0c;甚至临时数据结构中转站&#xff0c;几乎没…

作者头像 李华
网站建设 2026/10/5 7:09:55

ChatBI落地实战:大模型+BI的架构拆解与避坑指南

简介&#xff1a;《2024 ChatBIAgent实战手册&#xff08;八大案例&#xff0c;共134页&#xff09;》是一份面向数据分析、大模型与商业智能从业者及管理者的行业实践合集。手册汇集平安人寿、滴滴、喜马拉雅、腾讯、快手、阿里巴巴和网易等企业的ChatBI与AI Agent落地经验&am…

作者头像 李华
网站建设 2026/10/5 7:09:50

分布式事务方案详解与Spring Cloud集成实战指南

做后端开发久了&#xff0c;只要系统拆成了微服务&#xff0c;分布式事务这个问题就早晚会摆在面前。你在电商系统里下了一笔订单&#xff1a;订单服务写入一条订单记录&#xff0c;库存服务扣减库存&#xff0c;支付服务完成扣款。这三个服务通常各自独立部署、各自拥有独立的…

作者头像 李华