☰
VMware安装Linux虚拟机及NAT网络配置与Xshell连接排错
2026/9/29 20:35:00 网站建设 项目流程

虚拟化这门手艺,真正让我受益的从来不是"装完能用"那一刻,而是后面反复重装、快照回滚、网络调通之后,那种"环境是我的,我想怎么折腾就怎么折腾"的踏实感。VM 虚拟机加上 Linux 系统,几乎是每个做后端、测试、运维、嵌入式甚至是学安全方向的人都会走一遍的路。但网上大部分教程都有一个毛病:装完就结束了,网络那块一笔带过,结果新手卡在"Xshell 连不上"这一步能耗掉一整天。这篇内容我把从软件下载、安装配置、Linux 系统装完、到 VM 虚拟机网络配置整套流程拆开讲,重点放在网络配置和踩坑排查上——因为这一步才是真正决定你后面能不能顺利干活的分水岭。适合完全没接触过虚拟机的新手,也适合装过几次但网络一直没搞明白的朋友。

1. 动手之前:环境规划与技术选型思路

1.1 本地虚拟机到底解决了什么问题

很多人第一次听到"装个虚拟机"会本能地觉得多此一举,直接装双系统不香吗?我早年也这么想过,装过一次双系统之后彻底放弃了。原因很实在:双系统意味着每次切换都要重启,宿主机上的资料、浏览器标签、正在跑的编译任务全部要中断;一旦引导写歪了,修复 GRUB 的过程足够你怀疑人生。虚拟机把这些麻烦全部消掉了——Linux 跑在一个窗口里,宿主机该干嘛干嘛,两边还能同时传文件、同时开浏览器查文档。

更关键的是可回滚。这是我个人认为虚拟机最大的价值。你在 Linux 里改错了一个关键的配置文件、装崩了一个依赖、误删了系统目录,只要有快照,几十秒就能回到干净状态。实体机做这件事的成本是重装系统加重新配环境,虚拟机做这件事的成本是点一下鼠标。做实验、学内核、跑有风险的操作,状态隔离带来的安全感是刚需。

还有一层容易被忽略的价值:环境的可复制性。你先装好一台基础机,配好常用工具、改好源、装好 SSH,然后直接克隆出三台,一台当 Web 服务器,一台当数据库,一台当测试客户端,半小时就能拼出一个小型集群来验证分布式相关的东西。这个玩法在实体机上几乎没法低成本实现,而虚拟机克隆只需要注意一下网卡和 IP 的冲突问题,后面我会专门讲怎么处理。

1.2 虚拟化平台怎么选,我为什么还是推荐 VMware

市面上的选择其实不少。桌面端主流就是 VMware Workstation、VirtualBox、以及 Windows 自带的 Hyper-V,Mac 上是 VMware Fusion 和 Parallels。这几家的取舍逻辑不太一样。

VirtualBox 免费开源,跨平台支持好,插件生态也不错,缺点是图形界面在高分辨率屏上偶尔发虚,网络配置的表述和主流教程不太一致,新手跟着 VMware 的教程走容易对不上号。Hyper-V 是系统内置,性能其实不错,但它和 VMware 存在底层虚拟化冲突——开了 Hyper-V 之后 VMware 会跑在兼容模式,性能掉一大截,而且 Hyper-V 的网络是虚拟交换机模型,和大多数人熟悉的 VMnet 概念完全不同。Parallels 在 Mac 上体验一流,但要付费。

所以我的结论很直接:如果你要跟着主流教程学,用 VMware Workstation Pro。原因有三点。第一,网络模型清晰,桥接、NAT、仅主机三种模式各自对应一块虚拟网卡,出问题了排查路径明确,网上资料也最多。第二,快照、克隆、共享文件夹这些高频功能都很成熟,操作路径短。第三,也是最重要的一点——它现在对个人使用是免费的,官方提供了正规的免费授权获取渠道。这一点我在下一节会详细讲,因为很多人卡在"装完之后提示要输入密钥"这一步,然后就去搜一些乱七八糟的渠道,这是完全没必要的。

顺便提一句,如果你所在的环境对商业授权有严格要求,或者你就是偏好开源方案,VirtualBox 和 Linux 上原生的 KVM 都是很好的替代品,本文的操作逻辑(分配资源、装系统、配网络、SSH 连接)在大方向上完全通用,只是菜单名称不一样。

1.3 硬件资源怎么分:一笔算得清的账

资源分配这事,新手最容易走两个极端:要么给太少,卡到怀疑人生;要么给太多,宿主机自己先卡死了。我按常见配置给一个可落地的算法。

先算内存。Linux 服务器版最小化安装,纯命令行不跑图形界面,1GB 内存能跑起来,2GB 算舒服,4GB 可以流畅跑数据库和中间件。带桌面的 Ubuntu 建议至少 4GB,8GB 更稳。宿主机这边要留出足够余量:Windows 系统本身加浏览器加常用软件,8GB 是底线,16GB 是舒服线。所以16GB 的机器,给虚拟机 4GB 是安全区,给 8GB 属于"我今天啥也不干就玩虚拟机",别超过宿主机物理内存的一半。

再算 CPU。虚拟机的 CPU 核心数不要超过宿主机物理核心数(不是线程数)。四核八线程的处理器,给虚拟机 2 核是合适的,给 4 核会让宿主机和虚拟机抢资源。这里有个小技巧:如果虚拟机主要跑编译、跑测试这类 CPU 密集任务,核心数给足;如果只是跑个服务做验证,1 到 2 核完全够用,省下来的资源留给宿主机体验更好。

最后算磁盘。这个最容易被低估。Ubuntu Server 最小化装完大概 3 到 5GB,CentOS 最小化 2GB 左右,但你要考虑后续装 JDK、Maven、MySQL、Node、Docker 这些东西,再加上日志、缓存、镜像层,20GB 是紧巴巴的起步线,40GB 到 60GB 才是能安心用半年的量。选择"拆分成多个文件"的存储方式,磁盘不会一次性占满,是用多少涨多少,所以名义上给 60GB 并不会立刻吃掉你 60GB 物理空间。

提示:分配磁盘时如果选择"立即分配所有磁盘空间",创建过程会非常慢且瞬间占满物理盘,日常学习场景一律选"将虚拟磁盘拆分成多个文件"。

2. VM 虚拟机软件的下载、安装与授权处理

2.1 下载渠道与安装包的基本校验

下载这件事我只说一句:从官方渠道拿安装包。VMware 现在归属 Broadcom,产品下载和账号体系都在 Broadcom 支持门户里,注册一个账号就能拿到安装包和个人使用的许可。网上那些"绿色版""精简版""直装版",省下来的那点下载时间,换来的是后台常驻进程不明、被捆绑推广软件、甚至被塞进挖矿程序的风险。虚拟机软件是往你系统内核里装驱动的东西,权限极高,来源不明的版本我从来不碰。

拿到安装包之后做两件事。第一,看一眼文件大小,正常的完整安装包在几百 MB 量级,如果只有几十 MB,大概率是被裁过的或者根本不是这个软件。第二,如果官方页面提供了校验值,顺手对一下。Windows 下可以在 PowerShell 里用Get-FileHash看文件的 SHA256:

Get-FileHash .\VMware-workstation-full-xxxx.exe -Algorithm SHA256

Linux 下就是:

sha256sum VMware-Workstation-Full-xxxx.bundle

这一步花不了一分钟,但对下载过程可能出错的场景(比如网络波动导致文件不完整)是很有效的兜底。

2.2 安装过程逐项说明与关键选项解读

双击安装包,向导前面几步基本都是下一步。真正需要你做决策的是这几个地方。

安装位置。默认在 C 盘,如果你的 C 盘是固态且空间充裕,用默认就行,装 C 盘启动快。如果 C 盘吃紧,可以改到别的盘,但要注意路径里不要出现中文和空格,这一点很关键——虚拟机的某些组件对路径中的中文支持不好,会莫名其妙报错。

增强型键盘驱动。这个建议勾上,它能改善键盘输入在宿主机和虚拟机之间切换时的体验,尤其是用快捷键的时候不会丢按键。

启动时检查产品更新和加入客户体验提升计划,这两个纯粹看个人偏好,关掉能少一些后台网络请求,对使用没有任何影响。

快捷方式按需勾选,装完之后桌面会有 VMware Workstation Pro 的图标。

安装过程中会看到网络适配器的安装提示,这是正常的,虚拟机会向系统里注册 VMnet1 和 VMnet8 两块虚拟网卡,屏幕上闪一下网络断开是意料之中的事。装完之后建议重启一次系统,让虚拟网卡驱动彻底生效,很多人后面遇到的网络异常,其实都是没重启导致的驱动状态不对。

2.3 关于激活:正规的授权获取路径

这里我要把话说清楚,因为这是被问得最多的部分。

Linux 系统本身完全开源免费,不存在需要激活的问题。你从 Ubuntu、Debian、Rocky、AlmaLinux 等官方镜像站下载的系统,装完就能直接用,没有序列号、没有试用期、没有功能阉割。这一点很多新手被某些商业系统的经验误导了,一直在找"Linux 激活码",其实压根没这回事。国内也有不少优秀的开源发行版社区在做本地化适配,选择适合自己的就好。

真正涉及授权的是虚拟机软件本身。VMware Workstation Pro 已经推出了面向个人用户的免费使用方案,你在官方支持门户注册账号后,按照页面指引就能获取供个人使用的许可密钥,在软件的"帮助 - 输入许可证密钥"里填进去即可。整个过程是公开、合规、零成本的。务必走官方渠道,不要使用任何来源不明的密钥、注册机或所谓的"破解补丁"——这类东西在安全上完全不可控,而且从合规角度讲也是明确的红线。

如果你所在的组织有严格的采购和合规流程,或者你希望完全避开授权问题,那就直接换开源方案:桌面端 VirtualBox(个人和企业使用都免费),Linux 宿主上直接用 KVM + virt-manager。前面提到的安装系统、配置网络、SSH 连接这些内容,换平台后思路完全一样。

2.4 首次运行的三项初始化设置

第一次打开软件,有三件事建议先做掉,能省掉后面不少麻烦。

第一,进"编辑 - 首选项 - 更新",把自动更新检查关掉。虚拟机的自动更新偶尔会在你正跑着任务的时候弹出来,打断操作还占带宽。

第二,进"编辑 - 首选项 - 内存",确认一下"预留内存"的设置。如果你宿主机内存不宽裕,可以把"允许交换大部分虚拟机内存"打开,让系统在内存吃紧时把不活跃的虚拟机内存换到磁盘上,代价是虚拟机可能变慢,但宿主机不会被拖死。

第三,也是最关键的——打开**"编辑 - 虚拟网络编辑器"**,看一眼里面现有的网络。正常情况下你会看到 VMnet0(桥接)、VMnet1(仅主机)、VMnet8(NAT)。记住这个界面,后面所有网络问题的排查都从这里开始。如果这里的列表是空的或者有感叹号,先点右下角的"更改设置"拿管理员权限,再点一次"还原默认设置",让软件重新注册虚拟网卡。

3. Linux 系统安装配置:从镜像到可登录的机器

3.1 发行版选择与镜像获取的实用建议

选发行版这件事,我给一个按场景划分的简单结论,不搞学术讨论。

想少踩坑、生态友好、教程多:Ubuntu LTS 版本,比如 22.04 LTS。软件包新、社区活跃、遇到问题搜一下基本都有答案,apt 的体验对新手也友好。缺点是这两年默认网络配置工具换成了 netplan,和网上大量老的 ifconfig 教程对不上,需要适应一下。

想贴合企业生产环境:CentOS 的继任者路线。CentOS 7 做经典企业环境验证仍然有人用,但它已进入生命周期尾声,yum 源需要指向归档地址才能正常工作,新手容易被"Could not resolve host: mirrorlist.centos.org"卡住。更推荐Rocky Linux 9或AlmaLinux 9,它们是 RHEL 9 的下游兼容版本,命令体系、目录结构、包管理都和传统企业环境一致,而且是活跃维护的。

想练安全方向:Kali 是常见选择,但它更偏向工具集,做通用服务器练习不如前两个合适。

镜像获取一律走官方站或国内高校、云厂商的镜像站。下载时注意核对文件完整性,镜像站通常会提供校验文件。选 ISO 的时候别选太大的桌面版,做服务器练习就选 Server 版或者最小化安装镜像,体积小、装得快、装完干净。

3.2 新建虚拟机向导的每一项参数怎么填

点"创建新的虚拟机",我强烈建议选**自定义(高级)**而不是典型。典型模式会自动帮你决定一堆参数,而这些参数恰恰是你后面要调的地方,不如一开始就自己控制。

硬件兼容性:默认最新即可,除非你要把虚拟机挪到旧版本的软件上用。

安装来源:选"稍后安装操作系统"。这一步很关键,如果你直接选 ISO,软件会走"简易安装"路径,自动帮你决定分区和用户名密码,分配的分区方案往往不符合练习需求。选"稍后安装",后面可以用完整的安装程序界面走一遍分区流程,学到的东西更多。

客户机操作系统:Linux,版本按你实际下载的选,比如 Ubuntu 64 位、CentOS 7 64 位、其他 Linux 5.x 内核 64 位。选错一般也能装,但虚拟硬件的推荐配置会不一样。

虚拟机名称和位置:名称建议用有意义的名字,比如ubuntu-dev-01,后面克隆出多台的时候你能一眼分清谁是谁。位置一定要放在空间充足的盘,且路径里不要有中文。

处理器:按前面算好的核心数填。如果宿主机支持,把"虚拟化 Intel VT-x/EPT 或 AMD-V/RVI"打开,这个选项能让虚拟机里再跑容器或者嵌套虚拟化,对学 Docker 很有用。但要注意,打开它之后性能会有轻微损耗。

内存:同样的,按前面算好的数值填,不要图省事选"推荐"。

网络类型:这一步先选 NAT,等系统装完能上网了,我们再去细调。原因很简单,NAT 模式下虚拟机不需要额外配置就能访问外网,装系统过程中如果需要下载更新或者装软件会比较顺。

I/O 控制器类型和磁盘类型:默认即可,LSI Logic 和 SCSI 是通用性最好的组合。

磁盘:创建新虚拟磁盘,大小填 40GB 或 60GB,"将虚拟磁盘拆分成多个文件"。

磁盘文件名:默认。

最后确认一下摘要页,点完成。这时候虚拟机建好了,但还没有系统。

3.3 安装过程中的分区与账户设置

点"编辑虚拟机设置",在 CD/DVD 里选择"使用 ISO 映像文件",指向你下载的镜像,然后启动虚拟机。

开机后进入安装程序。前面几步是语言、键盘、时间(时区一定要选亚洲/上海,否则日志时间全是错的,排查问题时能把你绕晕)、软件选择(做服务器练习选最小化安装,需要图形界面就选带 GUI 的服务器)。

分区这一步是重点。自动分区会用 LVM 把整个盘吃满,做练习其实够用,但如果你想理解 Linux 的目录体系,建议选"我要配置分区"手动来一遍。

一个能落地的分区方案:

挂载点建议大小说明
/boot1GB内核和引导文件,独立出来出问题好修
swap内存的 1-2 倍,内存大于 8GB 时给 8GB交换空间,物理内存不够时的缓冲
/剩余空间的 20-30GB根分区,装系统和软件
/home剩余全部用户数据,独立出来重装系统时数据不丢

关于 swap 的大小,有个老规矩是"物理内存的两倍",但那是内存普遍只有 512MB 时代的经验了。现在内存动辄 8GB、16GB,给两倍纯属浪费磁盘。我的实际做法是:内存小于 4GB 给 2 倍,4GB 到 8GB 给等量,超过 8GB 就给 8GB 封顶。做实验环境甚至可以只给 2GB,反正你也不会真的把内存跑爆。

分区完成后会有一个格式化确认,接受即可。

账户设置:root 密码建议设一个你自己记得住的强密码,同时创建一个普通用户并勾选"将此用户设为管理员"。日常操作一律用普通用户加 sudo,这是个必须养成的习惯——用 root 直接干活,一次误操作可能就是灾难性的。

安装过程视机器性能大概 10 到 30 分钟。装完重启,进系统。

3.4 首次登录后的必做配置清单

系统能登录了,先别急着装软件,把下面这几件事做掉,后面会顺很多。

确认网络通不通。先ping一下外网,如果 NAT 模式配置正常,这一步应该就通了。如果不通,别慌,跳到最后面的排查章节。

配置国内软件源。这是提升体验最快的一步。Ubuntu 上可以先备份再替换:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g; s|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list sudo apt update

CentOS 7 因为已经进入维护期,官方源地址变了,需要指向归档地址:

sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|g' /etc/yum.repos.d/CentOS-*

Rocky 9 的话,默认源已经是可用的镜像,一般不需要大动,安装epel-release扩展源即可:

sudo dnf install -y epel-release

装基础工具。最小化安装的系统缺很多东西,一次装齐:

# Debian/Ubuntu 系 sudo apt install -y vim wget curl net-tools openssh-server tree unzip # RHEL/Rocky/CentOS 系 sudo dnf install -y vim wget curl net-tools openssh-server tree unzip

这里特别注意openssh-server。Ubuntu 桌面版默认可能没装 SSH 服务,导致你死活连不上,这是新手最常见的坑之一。

确认 SSH 服务在跑:

systemctl status sshd # RHEL 系 systemctl status ssh # Ubuntu

没启动就systemctl enable --now sshd。

打一个快照。进 VMware 菜单"虚拟机 - 快照 - 拍摄快照",起个名字叫"基础环境-干净"。这一步花 10 秒,救你 10 小时。后面不管怎么折腾崩了,右键恢复到这个快照,一分钟回到现在的状态。

4. VM 虚拟机网络配置:三种模式的原理与实操

4.1 NAT、桥接、仅主机:一张表看清它们的区别

网络这块是分水岭,我用一张表先把三种模式的本质说清楚,再讲具体怎么配。

对比项桥接模式NAT 模式仅主机模式
使用的虚拟网卡VMnet0VMnet8VMnet1
虚拟机 IP 段与宿主机所在局域网同段由 VMnet8 定义的独立网段由 VMnet1 定义的独立网段
能否访问外网能能(通过宿主机转发)不能
局域网内其他机器能否访问虚拟机能不能(除非做端口转发)不能
是否需要局域网有 DHCP需要,或手动配同段静态 IP不需要不需要
典型使用场景虚拟机要当服务器给同事访问日常学习、单机开发纯内网实验、多机集群练习

用生活化的比喻讲一下。桥接相当于你的虚拟机直接插了一根网线到你家路由器上,它在这个局域网里是一台独立的设备,有自己的 IP,别人能直接找到它。优点是"真",缺点是它要和你的宿主机抢局域网的 IP 地址,公司网络如果做了 MAC 地址绑定或者 IP 数量限制,虚拟机就上不了网了。

NAT相当于虚拟机住在宿主机里面,宿主机是个路由器。虚拟机可以主动出去访问外网,但外面的人进不来。日常学习、搭开发环境,NAT 是最省心的选择,因为不管你在家里、在公司、在酒店,只要能上网,NAT 就能用,IP 段永远固定,不会因为换了网络环境就崩掉。

仅主机相当于虚拟机和你自己组了个小局域网,谁也出不去,只有宿主机能跟虚拟机通信。做多机集群实验(一台当 Master,两台当 Worker)的时候,用仅主机模式是最干净的,因为不会互相干扰。

我自己的习惯配置是:虚拟机上挂两块网卡,网卡1用 NAT 负责上网,网卡2用仅主机负责宿主机和虚拟机之间的稳定通信。这样既有外网,又有固定不变的连接地址。不过在软件里配置两张网卡之前,建议先把单网卡 NAT 玩明白,别一上来就复杂化。

4.2 NAT 模式下手动配置静态 IP 的完整流程

默认情况下虚拟机走 DHCP,每次重启 IP 可能变,这对我们后面用 Xshell 连接是很不友好的。所以配静态 IP 是必须的。

第一步,确认 VMnet8 的网段信息。打开"编辑 - 虚拟网络编辑器",选中 VMnet8,点"NAT 设置",记住网关地址(通常是xxx.xxx.xxx.2),再回到主界面看子网 IP(通常是192.168.x.0,掩码255.255.255.0)。往下看"DHCP 设置",里面有一个地址池范围,一般是192.168.x.128到192.168.x.254。

注意:你要设的静态 IP 必须避开 DHCP 地址池。这是最容易踩的坑——很多人随手把 IP 设成192.168.80.200,结果发现重启之后 IP 变成了别的,或者和别的虚拟机冲突。地址池是.128到.254,那我们就用.10到.127这个区间,比如192.168.80.100。

第二步,在 Linux 里配置。不同发行版的方式差别很大,我分别写。

Ubuntu 22.04 用 netplan。先看一下网卡名字:

ip addr

假设网卡叫ens33,编辑配置文件:

sudo vim /etc/netplan/00-installer-config.yaml

内容写成:

network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168.80.100/24 routes: - to: default via: 192.168.80.2 nameservers: addresses: [223.5.5.5, 119.29.29.29]

然后应用:

sudo netplan apply

netplan 有两个经典坑必须说。第一,YAML 文件严格禁止使用 Tab 缩进,必须用空格,层级关系全靠缩进表达,一个 Tab 就能让整个配置解析失败。第二,如果netplan apply报权限相关的警告,检查一下配置文件权限,可以用sudo chmod 600收紧。

CentOS 7 / Rocky 系用网络脚本或 nmcli。CentOS 7 的写法:

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

内容:

TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.80.101 PREFIX=24 GATEWAY=192.168.80.2 DNS1=223.5.5.5 DNS2=119.29.29.29

重启网络:

sudo systemctl restart network

Rocky 9 更推荐用 nmcli,一条命令搞定:

sudo nmcli con mod ens160 ipv4.addresses 192.168.80.102/24 \ ipv4.gateway 192.168.80.2 \ ipv4.dns "223.5.5.5 119.29.29.29" \ ipv4.method manual sudo nmcli con up ens160

这里的ens160要换成你实际的连接名,用nmcli con show可以查。

4.3 验证网络连通性的正确顺序

配置完不要直接去连 Xshell,按照从近到远的顺序一步步验证,这样出问题了能立刻定位到是哪一层断了。

第一步,看本机 IP 有没有生效:

ip addr show ens33

看输出里有没有你配的那个 IP。没有的话,说明配置文件没生效,回头检查语法。

第二步,ping 网关:

ping -c 4 192.168.80.2

通不了说明虚拟网络本身有问题,不是 Linux 的问题,去检查虚拟网络编辑器。

第三步,ping 公网 IP:

ping -c 4 223.5.5.5

能通说明路由和 NAT 转发是好的,问题只可能出在 DNS 上。

第四步,ping 域名:

ping -c 4 www.baidu.com

如果第三步通、第四步不通,那就是 DNS 配置的问题,检查/etc/resolv.conf:

cat /etc/resolv.conf

如果没有 nameserver 记录,可以临时加一条:

echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

要注意 Ubuntu 上的/etc/resolv.conf经常是一个指向 systemd-resolved 的软链接,手改会被覆盖,正确做法是在 netplan 里配 nameservers,改完netplan apply。这个细节知道的人不多,但踩过的人一定印象深刻。

第五步,检查 hosts 文件。如果你要给虚拟机起个域名方便访问,可以改/etc/hosts,但更推荐在宿主机上改,把虚拟机的 IP 和主机名对应起来,这样宿主机 ping 主机名就能通。

4.4 用 Xshell 连接虚拟机的完整排错流程

Xshell 是 Windows 上很常用的 SSH 客户端,类似的还有 PuTTY、MobaXterm、以及 Windows 自带的ssh命令。连接步骤很简单:新建会话,协议选 SSH,主机填虚拟机的 IP,端口 22,然后输用户名密码。连不上才是常态,按下面的顺序排查。

排查第一层:宿主机能不能 ping 通虚拟机。在 Windows 的 CMD 里执行ping 192.168.80.100。如果通不了,说明网络层就没通,先回去检查 4.2 和 4.3。注意,如果是 NAT 模式,宿主机和虚拟机之间通常是可以互通的,因为宿主机会有一个 VMnet8 的接口。

排查第二层:SSH 服务有没有起来。

systemctl status sshd

如果显示inactive或者Unit sshd.service could not be found,那就是没装或者没启动。Ubuntu 上是ssh而不是sshd:

sudo apt install -y openssh-server sudo systemctl enable --now ssh

排查第三层:端口有没有在监听。

ss -tlnp | grep 22

有输出说明服务在监听。没输出就是服务本身的问题。

排查第四层:防火墙。这是 CentOS 系的重灾区。CentOS 7 默认开着 firewalld:

# 查看状态 systemctl status firewalld # 开放 22 端口(推荐做法) sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload # 或者临时关闭(仅实验环境) sudo systemctl stop firewalld sudo systemctl disable firewalld

Ubuntu 上默认是 ufw,一般没开,如果开了就sudo ufw allow 22。

排查第五层:SELinux。RHEL 系默认开启 SELinux,有时会拦截 SSH 的连接。查看状态:

getenforce

如果是Enforcing,实验环境下可以临时放宽:

sudo setenforce 0

永久关闭要改/etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled,然后重启。生产环境不建议直接关,那是另一个话题了。

排查第六层:确认没连错机器。这个听起来蠢,但真的经常发生——你克隆了三台虚拟机,结果连的是另一台的 IP。hostname命令看一眼当前主机名就能确认。

5. 常见故障排查实录与避坑经验

5.1 虚拟网卡丢失、VMnet1 有感叹号怎么办

这个问题的典型症状是:虚拟网络编辑器里少了 VMnet1 或 VMnet8,或者 Windows 设备管理器里看到 "VMware Virtual Ethernet Adapter for VMnet1" 带一个黄色感叹号,虚拟机彻底上不了网。

原因通常是驱动注册失败、系统更新后驱动被替换、或者被安全软件拦截了。处理办法按顺序试。

第一步,在虚拟网络编辑器里点"还原默认设置"。这需要管理员权限,点右下角"更改设置"按钮拿到权限后再点。这个操作会把所有 VMnet 删掉重建,是最有效的一招。代价是自定义的网络配置会丢,所以先记好你改过的网段。

第二步,如果还原无效,去 Windows 的"设备管理器 - 网络适配器",找到带感叹号的 VMware 虚拟网卡,右键卸载设备(勾选"删除此设备的驱动程序软件"),然后回到虚拟网络编辑器再点一次"还原默认设置",让它重新安装驱动。

第三步,还是不行的话,彻底卸载虚拟机软件,重启,重新安装。安装时如果杀毒软件弹窗询问是否允许安装网络驱动,一定要允许。

第四步,检查 Windows 的"网络连接"里,VMnet1 和 VMnet8 是不是被禁用了。被禁用的话右键启用即可。还有一个隐蔽情况:某些网络管理软件或者企业安全策略会把虚拟网卡设为"公用网络"并施加限制,这时候把 VMnet 网络改成"专用网络"往往能解决。

5.2 克隆、快照还原后虚拟机失联的处理

克隆虚拟机是非常高频的操作,但它会带来两类问题,都是我踩过的。

第一类是网卡名变了。CentOS 7 这类系统会把网卡名和 MAC 地址绑定起来,克隆之后新机器的 MAC 变了,系统就会把原来的ens33命名成ens37或者干脆没有可用网卡。你会发现ip addr里只有一个lo。

解决办法是这样:

# 看一下当前实际网卡名 ip link show # 看一下配置文件 ls /etc/sysconfig/network-scripts/

如果实际网卡叫ens37,那就把配置文件也改成这个名字,并且修改里面的NAME和DEVICE字段:

sudo mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37 sudo sed -i 's/ens33/ens37/g' /etc/sysconfig/network-scripts/ifcfg-ens37 sudo systemctl restart network

另外记得把配置文件里的UUID和HWADDR两行删掉,这两个是从原机器带过来的,会导致新机器识别异常。

第二类是 IP 冲突。克隆出来的机器所有配置都跟原机一模一样,包括静态 IP。两台机器同一个 IP,网络必然出问题。所以克隆完成后第一件事就是改 IP 和主机名:

sudo hostnamectl set-hostname node-02

然后按 4.2 的方法改 IP,改完两个机器互相 ping 一下确认不冲突。

第三,快照还原之后网络失联。这个情况比较微妙。如果你拍快照的时候网络是正常的,还原之后应该也是正常的。但如果还原之后连不上,最常见的原因是宿主机侧的 VMnet 网段变了(比如你后来改过虚拟网络编辑器),而快照里的 IP 还是老的。处理方法是登录虚拟机控制台,重新按当前的网段配一遍 IP。

5.3 软件源配置与常见报错处理

换源之后最常见的三个报错,我一次性说清楚。

Could not resolve host: mirrors.xxx.com:DNS 没配好或者网络不通。先ping一下域名,不通就回头查 DNS 配置。

Failed to download metadata for repo 'base'(CentOS 8/7 常见):这是源地址失效导致的,CentOS 7 已经进入归档状态,必须把 baseurl 指向centos-vault目录。注意归档地址的路径里带版本号,比如7.9.2009,不同小版本路径不一样,去镜像站看一眼实际目录结构再改。

GPG check FAILED:包签名校验失败,可能是镜像站的 key 没导入。执行:

sudo rpm --import https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

换源之后记得清缓存重建:

# CentOS 系 sudo yum clean all sudo yum makecache # Ubuntu 系 sudo apt clean sudo apt update

提示:换源操作前一定要备份原文件。一句cp xxx.repo xxx.repo.bak,能让你在新源有问题的时候快速回退。

5.4 中文压缩包解压乱码的解决思路

从 Windows 传过来的 zip 包,解压出来文件名全是乱码,这是编码不一致导致的。Windows 中文环境默认用 GBK,Linux 默认用 UTF-8,两个一碰上就乱。

最省事的办法是用unzip指定编码:

unzip -O cp936 filename.zip -d target_dir

不过要注意,部分发行版自带的 unzip 版本不支持-O参数,会报"invalid option"。这种情况下换工具:

# 用 7z,指定代码页 7z x -mcp=936 filename.zip # 或者用 unar,会自动识别编码 unar filename.zip

如果文件已经解压出来了,名字是一堆乱码,可以用convmv批量改回来:

# 先预览,不实际修改 convmv -f GBK -t UTF-8 -r --notest ./target_dir

确认预览结果正确后,把--notest去掉执行实际转换。

避免这个问题的根本办法是在源头解决:在 Windows 上用支持 UTF-8 的压缩工具重新打包,或者在传输前就把文件名改成英文。我现在传文件给 Linux 都习惯用英文名,省掉一堆麻烦。

6. Linux 常用命令与环境扩展方向

6.1 高频命令速查:日常操作绕不开的那些

环境搭好了,接下来就是天天敲命令。下面这张表是我自己整理的高频命令清单,按用途分类,新手可以对着练。

用途命令说明
查看 IPip addr或ip a替代老的 ifconfig
查看路由ip route看默认网关在哪
测试连通ping -c 4 目标只发 4 个包,不挂住终端
查看端口ss -tlnp替代 netstat,更快
查进程ps -ef | grep 关键字经典组合
实时资源top或htophtop 需要额外安装,体验更好
磁盘占用df -h看分区还剩多少
目录大小du -sh 目录排查空间被谁吃了
查文件find /path -name "*.log"按名字找
看日志尾tail -f 文件实时跟踪日志
解压tar -zxvf a.tar.gzz 是 gzip,j 是 bzip2
权限chmod 755 文件常用组合
属主chown user:group 文件改归属
服务systemctl status/start/stop/restart 服务名现代系统统一用这个
软件apt install/dnf install按发行版选

命令这块我的建议是别死记,用一次记一次。但有几个组合是必须变成本能的:tail -f看日志、ss -tlnp查端口、df -h看空间、ps -ef | grep找进程。这四条覆盖了日常排查 80% 的场景。

6.2 在虚拟机上继续搭开发环境

基础环境稳了之后,大多数人的下一步是在这台机器上装开发工具链。我把常用的几个装法简单列一下,具体细节网上很多,这里只说在虚拟机环境里容易出问题的地方。

Git:

sudo apt install -y git # Ubuntu sudo dnf install -y git # Rocky git config --global user.name "你的名字" git config --global user.email "你的邮箱"

如果在虚拟机里拉代码很慢,可以配置代理走宿主机的网络,或者用国内的一些镜像加速源。注意git config里的 user 信息一定要配,否则提交记录里的作者是乱码。

Node.js:不建议用系统源里的版本,往往太老。用 NodeSource 的源装指定版本:

curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo dnf install -y nodejs node -v && npm -v

Ubuntu 上把第一行的rpm换成deb,后面的安装命令换成apt install。

数据库:做练习的话,MySQL 或者 MariaDB 都可以。RHEL 系上装完 MariaDB 之后记得跑一次安全初始化:

sudo mysql_secure_installation

这里有个新手常踩的坑:MySQL 装完之后本机mysql -u root -p能连,但从宿主机用客户端连不上。原因是 MySQL 默认只监听127.0.0.1。要允许远程连接,得改配置文件里的bind-address,还要在mysql.user表里授权对应的主机。实验环境可以这么做,生产环境千万别随便开。

Maven:直接解压配置环境变量即可,记得改settings.xml里的镜像源,不然下载依赖能等到怀疑人生。

6.3 我踩坑之后固化下来的几个操作习惯

写到这里,说几个纯粹来自实际操作的体会,网上教程基本不会提。

第一,每次环境大的变更之前都拍快照。装完系统拍一个叫"干净系统",装完开发工具链拍一个叫"开发环境就绪",改网络配置前再拍一个。快照这东西占磁盘但省命,我给每个快照写清楚备注,三个月后回来还能一眼看出哪个是哪个。计算快照占用的经验值是:快照文件通常在几百 MB 到几个 GB,取决于你改了多少东西,别一口气拍十几个,占用会很可观。

第二,虚拟机一律用静态 IP,从第一台开始。我早期用 DHCP,后来机器多了,每次重启 IP 都可能变,Xshell 里的会话全部要重配,烦到崩溃。自从所有机器固定 IP 之后,这套环境就再没给我添过麻烦。

第三,主机名从第一台就起好。dev-web-01、dev-db-01这种命名,比localhost.localdomain和minimal强一万倍。多机环境里,你敲命令之前看一眼提示符就知道自己在哪台机器上,避免在数据库机器上执行了本该在 Web 机器上跑的命令。

第四,双网卡是个好东西,但要晚点学。我现在的常规配置是 NAT 加仅主机的组合,NAT 管上网,仅主机管宿主机和虚拟机之间的稳定通信,克隆多台机器做集群练习的时候特别顺。但如果你刚开始学,先把单网卡 NAT 彻底玩明白,再上双网卡,不然出问题的时候变量太多,排查会很痛苦。

第五,养成cp xxx xxx.bak的习惯。改任何配置文件之前先备份,这是零成本的操作。我改 netplan 配置文件、改 yum 源、改 MySQL 配置之前都会备一份,回滚的时候直接覆盖回去,比重敲一遍强得多。

第六,把虚拟机的文件放在单独的分区或者大盘上。我见过太多人 C 盘爆了导致虚拟机启动失败,最后要挪文件路径,那个操作比重新装一遍还麻烦。一开始就规划好存放位置,后面能省很多事。

这套流程走下来,从零到一台能远程连接、能上网、能拍快照回滚的 Linux 实验机,熟练之后大概一个多小时。第一次做可能会花三四个小时,卡在网络配置上是正常的,按第 4 节的排查顺序一层层走,问题一定定位得到。等你配完三五台,这套东西就变成肌肉记忆了,后面再学容器、学集群、学自动化部署,脚下踩的就是这块地基。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询