说实话,我刚接触虚拟机那会儿,最烦的就是两件事:一是VMware里的系统装好了,却不知道怎么从本机连进去操作,每次想改个配置都得在虚拟机的窗口里敲半天命令,窗口一多切换得眼花;二是好不容易知道可以用终端软件连,结果照着网上教程配了半天,不是连不上就是IP找不到。后来我把Xshell和VMware这套组合彻底吃透了才发现,这俩工具的配合,核心不在操作多花哨,而在网络模式选没选对、SSH服务开没开、账号认证怎么配这三个环节。这篇就专门聊聊这些,从VMware侧的网络配置,到Ubuntu里的SSH开启,再到Xshell的连接和日常操作,一次讲清楚。
1. 动手之前的网络选择题:VMware的三种模式为什么NAT最省心
很多人装完VMware,建好虚拟机,系统一装完就开始装Xshell,结果连了半天连不上,第一反应是Xshell配置错了。其实大概率是虚拟机网络模式没选对。
VMware给虚拟机提供了三种网络工作模式:桥接模式、NAT模式和仅主机模式。它们对应的应用场景完全不同。
桥接模式相当于虚拟机直接"插"到了你所在的路由器上,和宿主机是同一层级的设备,有自己的独立IP。这个模式的好处是虚拟机能被局域网里的其他设备直接访问,坏处是如果你的网络环境是办公网、校园网这类做了MAC绑定或IP限制的场所,虚拟机经常拿不到IP,或者拿到的IP过一会儿就被回收了,Xshell连不上就很正常。
NAT模式则是宿主机充当了一个"网关"角色,虚拟机躲在宿主机后面,通过宿主机的地址把流量翻译出去。这种模式下,虚拟机只要能连上宿主机就行,对外部网络环境不敏感,你换办公室、换WiFi、换校园网,都不影响虚拟机里的网络。对绝大多数个人学习和开发场景,NAT是首选。
仅主机模式就像虚拟机跟宿主机单独拉了一根网线,两只互不干扰,虚拟机完全不能访问外网。这种模式一般用在恶意代码分析、隔离测试这种需要断网的场景。
从我这些年的使用经验来看,如果你只是想在Xshell里操作VMware里的Ubuntu,做开发、学Linux、跑服务,直接用NAT模式就够了。原因很简单:Xshell本质上是SSH客户端,它和虚拟机通信只需要走局域网虚拟链路,不需要虚拟机拥有公网可达的地址,NAT模式下宿主机和虚拟机之间的虚拟链路是天然可达的。
提示:VMware安装完虚拟机后,默认网络模式一般就是NAT。如果你不小心改成了桥接或仅主机,可以在虚拟机设置 -> 网络适配器 -> 网络连接里改回来,不需要重装系统。
这里多说一句,虚拟机网络这块经常有人踩的坑是:装了VMware之后,Open虚拟网卡被禁用了。你在Windows的服务管理器里能看到VMware NAT Service这个服务,如果它没再运行,虚拟机网络就会异常,Xshell自然连不上。后面排查那一章我会专门讲这个。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Ubuntu虚拟机里的SSH服务:Xshell连不连得上,全看这一关
网络模式选好了,接下来就是虚拟机内部的事。Xshell连接Linux靠的是SSH协议,但Ubuntu桌面版默认是不装SSH服务端的。很多人刚装完Ubuntu,打开终端,输入sudo apt install openssh-server,结果报错,或者装完连不上,原因基本都在下面几个环节。
2.1 安装openssh-server
登录Ubuntu虚拟机,按Ctrl+Alt+T打开终端,先更新软件源:
bash复制sudo apt update
sudo apt upgrade -y
然后安装SSH服务端:
bash复制sudo apt install openssh-server -y
装完之后,SSH服务一般会自动启动。检查一下服务状态:
bash复制sudo systemctl status ssh
如果状态是active (running),说明服务正常。如果没跑起来,手动启动:
bash复制sudo systemctl start ssh
sudo systemctl enable ssh
第二句是把SSH服务设置为开机自启。这一步很关键,不然你重启虚拟机之后,Xshell又连不上了,容易误以为系统坏了。
2.2 确认监听端口和地址
SSH默认监听22端口。有时候你在虚拟机里装了别的服务占用了22端口,SSH会启动失败。可以用下面的命令确认端口监听情况:
bash复制sudo netstat -tlnp | grep 22
输出里如果有类似 0.0.0.0:22 的记录,说明SSH在正常监听所有网络接口。如果只看到 127.0.0.1:22,说明SSH只监听本地回环,外部连接肯定进不来。这时候需要修改配置文件:
bash复制sudo vim /etc/ssh/sshd_config
找到 ListenAddress 这一行,如果没有就手动加一行:
code复制ListenAddress 0.0.0.0
或者直接注释掉所有 ListenAddress 行,让它默认监听所有接口。改完重启SSH:
bash复制sudo systemctl restart ssh
2.3 防火墙会不会挡
Ubuntu 22.04及之后的版本,默认可能没开ufw防火墙,但如果你执行过 sudo ufw enable,那就要放行SSH:
bash复制sudo ufw allow 22/tcp
sudo ufw status
status输出显示Status: active,且22/tcp是ALLOW状态,就没问题。如果是inactive,说明防火墙没开,不需要额外处理。
2.4 用ip addr确认虚拟机IP
Xshell连接需要目标IP。在Ubuntu终端里执行:
bash复制ip addr show
或者更简洁的方式:
bash复制ip -4 addr show | grep in
