ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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这场景比你想的实在这两年谈远程登录满屏都是SSHtelnet被当成老古董。可真的上手运维就会发现虚拟机里的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或ens160Ubuntu常见是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把文件内容调整为如下关键项其他项保留即可BOOTPROTOstatic ONBOOTyes IPADDR192.168.8.128 NETMASK255.255.255.0 GATEWAY192.168.8.2 DNS1223.5.5.5在NAT模式下IPADDR要在vmnet8网段里选一个没被占用的地址GATEWAY通常是VMware NAT网关默认是.2可以在VMware的“虚拟网络编辑器”里看到。桥接模式下GATEWAY填你路由器的LAN地址比如192.168.1.1IPADDR则选一个网段内空闲地址。改完后重启网络服务systemctl restart network # 验证IP是否生效 ip addr show ens33 # 验证网关是否通 ping -c 3 192.168.8.2Ubuntu 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验证。这里有个很常见的坑修改配置文件时把ONBOOTno留着忘了改或者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.socketCentOS 7之后没有telnet.service了 systemctl enable telnet.socket systemctl start telnet.socket # 查看监听端口 ss -ltn | grep 23Ubuntu/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] namelocal baseurlfile:///mnt/cdrom enabled1 gpgcheck0 EOF yum clean all yum install -y telnet-server telnet这里gpgcheck0是跳过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.128telnet客户端默认会尝试连接对端的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或者CtrlD如果某次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界面错位大都是终端类型不匹配此时可以退出后用TERMlinux telnet ...这种方式启动连接或者登录后手动执行export TERMlinux和export TERMDUMB来调。交互期间telnet会话有点像串口终端不支持SSH那样的窗口尺寸自动同步。在虚拟机里跑需要全屏刷新的命令如htop、vim时列数和行数可能不对视觉上会很难受。我一般在虚拟机上提前把/etc/profile里加一行export TERMvt100让每个telnet登录的用户都使用固定终端类型这样至少能让vim正常使用。至于退出连接exit退出shell后telnet客户端一般会自动关闭如果shell已经退出但客户端还停留在Connection closed by foreign host.这类提示直接回车即可回到宿主机命令行。强行用CtrlC关掉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-port23/tcp # 长期放行 firewall-cmd --permanent --add-port23/tcp firewall-cmd --reloadUbuntu用ufw时执行ufw allow 23/tcp。如果不开防火墙策略但想快速验通临时关掉防火墙systemctl stop firewalldCentOS或systemctl stop ufwUbuntu也可以不过记得验证完恢复。4.4 密码输入不显示、退格键变成乱码现象登录时输入密码看不到字符这其实是正常的telnet行为。但有些初学者按下退格键想纠正密码结果屏幕出现^H后面输入的内容全乱套。原因telnet的NVT线路规程没有像SSH那样处理终端行编辑退格键在部分终端配置下被解释成普通字符^H而服务端shell又没有正确的erase设置。解决为了避免输错密码用户在输入密码前要一次性在脑子里想好输错了就回车重来。登录后进入shell如果退格键不能用执行下面两个命令修复# 设置erase字符为退格 stty erase ^H # 设置终端类型 export TERMvt100如果^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 LANGen_US.UTF-8 # 永久设置写入 /etc/locale.confCentOS或 /etc/default/localeUbuntu宿主机如果是WindowsCMD默认代码页可能是936GBK执行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测端口通不通不是只能连23telnet的价值远不止登录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 批量巡检多台虚拟机shellexpect循环如果你在维护多个虚拟机telnet批量巡检的场景很实在登录每台机器执行相同的命令比如查磁盘、查负载把结果汇总。一个常见的做法是在shell里循环调用expect脚本#!/bin/bash # 批量telnet巡检虚拟机前提是expect脚本已就绪 hosts192.168.8.128 192.168.8.129 192.168.8.130 usermyuser passmypass 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 TMOUT300 /etc/profile source /etc/profile第三件事是记录这次telnet是从哪个宿主机IP连过来的写入自己的运维笔记。telnet没有SSH那样的审计日志友好默认只记录登录事件不记录每一条命令所以手动记一笔很有必要。我以前在一台测试虚拟机上用telnet调试防火墙策略忘了关会话第二天发现测试网络里多了一台跳板机的登录记录才意识到这台机器被扫了。虽然后来确认是同事在联调但从那以后我就养成了登录后先看会话、设TMOUT、记来源IP的习惯。生产环境里只要虚拟机内核支持能装SSH就尽早装SSH。telnet适合内网临时救急不适合承载持续性的管理通道。你完全可以在虚拟机里同时开着SSH和telnet日常操作走SSH排查某些老协议问题时再开telnet。如果有一天你发现自己在一个环境里只能用telnet第一反应应该是思考为什么SSH起不来而不是庆幸telnet还能用。希望这套从网络配置、服务启动到故障排查和脚本化的流程能帮你把telnet这个老工具在虚拟机的世界里用得顺手且心里有底。本文还有配套的精品资源点击获取
返回列表