VMware虚拟机连不上Xshell?网络模式和SSH配置排查指南

📅 发布时间:2026/9/17 19:38:59
VMware虚拟机连不上Xshell?网络模式和SSH配置排查指南
用VMware跑Linux连不上Xshell先搞清楚这三件事每次有人问我为什么Xshell连不上VMware里的Linux我的第一反应都是同一个问题你用的虚拟机网络模式是哪个很多教程上来就让你敲命令却漏了最关键的网络层配置。VMware虚拟机、Linux系统和Xshell三者的关系说白了就是房东物理机—租户虚拟机—访客Xshell客户端的关系租户能不能被访客找到完全取决于租户拿的是什么门牌号。这篇教程适合刚接触VMware虚拟机和Xshell的初学者也适合那些照着教程操作却始终连不上的老倒霉蛋。我会从最基本的网络模式选择讲起一步步带你走到Xshell成功连上Linux的界面中间穿插我踩过的坑和排查思路。内容以VMware Workstation 17和Ubuntu 22.04为例CentOS等其他发行版操作类似命令略有差异时会单独说明。1. 先把VMware虚拟机网络模式讲透不然连不上真的不怪你很多教程默认你已经知道NAT、桥接、仅主机这三种网络模式的区别直接跳过这部分。但根据我帮人排查的经验90%的连接失败案例都死在这一步——要么选错了模式要么根本不知道自己选了什么模式。1.1 VMware的三种网络模式到底怎么区分简单说这三种模式决定了你的虚拟机在局域网里是什么身份。桥接模式虚拟机直接和物理机平级相当于局域网里多了一台独立的设备。它会占用一个和物理机同一网段的IP比如物理机是192.168.1.5虚拟机就是192.168.1.6。其他设备可以直接访问它它也能直接访问其他设备。听起来很理想但缺点是IP资源有限而且如果物理机所在网络的网关做了MAC地址过滤或IP绑定虚拟机很容易上不了网。NAT模式虚拟机躲在物理机背后通过物理机代理上网。物理机相当于一台路由器虚拟机使用的是VMware虚拟出来的一个私有网段默认是192.168.xxx.0。虚拟机可以上网但外界不能直接访问虚拟机除非做端口转发。这个模式对新手最友好因为不需要关心物理网络环境只要物理机能上网虚拟机就能上网。仅主机模式虚拟机只能和物理机通信完全不能访问外部网络相当于一个封闭的隔离环境适合做实验。对于Xshell连接这个需求我的建议是如果你只是想学习和练习Linux命令无脑选NAT。桥接模式虽然也能连但受物理网络环境影响大容易出幺蛾子。1.2 为什么NAT模式下Xshell能用其他模式却可能翻车NAT模式下VMware会创建虚拟网卡VMnet8物理机和虚拟机都挂在这个虚拟交换机上。固定是有默认的IP配置的——物理机的VMnet8网卡通常是192.168.xxx.1虚拟机则是192.168.xxx.128DHCP分配之类的地址。Xshell连接虚拟机本质上就是物理机通过VMnet8这个虚拟网卡去访问虚拟机路径是通的而且是虚拟网络内部的事情不受物理路由器的干扰。桥接模式下虚拟机需要和物理机在同一网段如果路由器开启了AP隔离、DHCP地址池分配完了或者物理网络对设备数量有限制虚拟机就拿不到正确的IPXshell自然连不上。仅主机模式就更不用说了这种模式下虚拟机可以主动访问物理机但外部的Xshell无法主动连接它通常需要额外配置才能双向通信。2. 虚拟机装好系统之后先检查这几处再做连接很多人一装完Linux就急着打开Xshell结果连接被拒绝。这一步不急先把虚拟机的底子打牢。我见过最少的问题是虚拟机没装VMware ToolsOpenSSH服务没启动然后就开始疯狂怀疑网络配置。所以咱们按顺序来不要跳步。2.1 确认SSH服务已安装并运行Xshell连接Linux走的是SSH协议默认端口22。Ubuntu Server版默认装好了SSH服务但Ubuntu Desktop版默认没有安装需要手动装。你可以在虚拟机里打开终端先检查一下SSH服务在不在systemctl status ssh如果提示Unit ssh.service could not be found说明没装执行sudo apt update sudo apt install openssh-server -y装完之后再启动sudo systemctl start ssh sudo systemctl enable sshenable是设置开机自启这个一定要做不然虚拟机重启之后SSH服务不会自动起来你又得跑回VMware图形界面里开终端去手动启动。CentOS/RHEL系的命令是systemctl start sshd服务名带个d。刚开始学的时候容易搞混记不住就直接用systemctl status ssh看报错报错会提示你正确的服务名。2.2 VMware Tools和网络适配器的整理VMware Tools不是强制要求但它能让虚拟机的网络驱动更稳定尤其是网卡驱动还能支持剪贴板共享、拖拽文件这些方便的功能。在VMware Workstation里选虚拟机菜单下的安装VMware Tools在Linux里挂载光盘后运行安装脚本一路默认回车即可。网络适配器的设置在创建虚拟机时可以选也可以在虚拟机设置里改。对NAT模式来说适配器选默认的VMnet8NAT模式就行。这里有个容易踩的坑如果你把网卡设成了桥接模式却不知道后面连接出问题时排查方向就可能搞错。所以开始操作之前先在VMware的虚拟机设置——网络适配器里确认自己选的是什么模式。3. 给虚拟机设置固定IP并配置Linux网络重点全在这里虚拟机的IP如果是DHCP动态分配的每次重启都有可能变你得经常跑回虚拟机里查IP很麻烦。所以我的习惯是一开始就给虚拟机设一个固定IP。固定IP不但让Xshell连接稳定也是后面做端口转发、挂服务的基础。3.1 查看当前IP和网关先看到当前的网络情况ip addr show ip route show第一条命令查看IP地址第二条查看网关。在多网卡的机器上ip addr show里会有多个接口NAT模式下一般看ens33、ens160或者eth0这种对应的是虚拟机的主网卡。ip route show里default via后面那个IP就是网关NAT模式下这个网关通常是192.168.xxx.2注意不是.1.1是物理机VMnet8网卡的地址。这两个信息很重要后面配置静态IP时要用到。3.2 使用netplan配置Ubuntu静态IPUbuntu 18.04以上版本使用netplan管理网络。配置文件在/etc/netplan/目录下一般是01-network-manager-all.yaml或99-config.yaml。查看一下现有配置ls /etc/netplan/ sudo cat /etc/netplan/99-config.yaml编辑这个文件需要sudo权限sudo vim /etc/netplan/99-config.yaml内容大致改成这样network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.88.128/24 routes: - to: default via: 192.168.88.2 nameservers: addresses: - 223.5.5.5 - 119.29.29.29注意把ens33换成你自己的网卡名192.168.88.128/24换成你虚拟网段内的可用IP192.168.88.2换成你自己的网关地址。DNS服务器这边我用了国内公共DNS你根据自己的网络环境选阿里223.5.5.5、腾讯119.29.29.29都可以。改完之后应用配置sudo netplan apply然后再执行ip addr show确认IP是否生效。如果你在配置完静态IP后Xshell连接照旧失败多半是网段写错了或者和VMware的虚拟网段对不上。这个我后面会专门讲排查。CentOS系的静态IP配置方式不太一样改/etc/sysconfig/network-scripts/ifcfg-ens33核心字段有BOOTPROTOstatic、IPADDR、GATEWAY、DNS1改完systemctl restart network。不过新版的CentOS Stream/RHEL 9开始转向NetworkManager方式在慢慢统一。3.3 修改VMware虚拟网络编辑器默认的NAT网段一般是192.168.88.0或192.168.148.0之类VMware每次安装时随机生成的不固定。打开VMware Workstation的编辑——虚拟网络编辑器选中VMnet8可以看到子网IP和子网掩码例如192.168.88.0/24。记住子网网段这就是你要给虚拟机设IP的范围。如果发现网关不是默认的.2或者虚拟网段干扰了你的物理网络你也可以在虚拟网络编辑器里手动改子网IP。注意改完后物理机VMnet8网卡的IP也会跟着变需要确保和虚拟网段匹配。一般来说保持默认不会有问题不用瞎改。4. Xshell新建会话连接虚拟机以及防火墙这些拦路虎到这一步VMware里的Linux已经配好了固定IPSSH服务也跑起来了。现在打开Xshell咱们开始新建会话。4.1 新建会话的标准配置过程打开Xshell点击左上角新建按钮或快捷键CtrlN。名称给这个会话起个名字比如Ubuntu-88.128主机填刚才在虚拟机上设的IP地址比如192.168.88.128协议默认SSH端口号默认22除非你改过sshd_config里的Port填完点连接。首次连接会弹出SSH用户密钥验证或接受并保存主机密钥的提示选择接受然后输入虚拟机上Linux系统的用户名和密码。连接成功后Xshell的命令行窗口会显示一个Linux提示符到这一步就算是大功告成了。整体流程看起来简单但我见过太多人挂在防火墙这里。Ubuntu自带ufw防火墙如果开启了默认只放行个别端口SSH的22端口不在放行列表里Xshell连接就会被拒绝。4.2 防火墙放行SSH端口别让自己被自己挡住如果你在Ubuntu里开启了ufw检查命令sudo ufw status状态是active就是开启了需要放行22端口sudo ufw allow 22/tcp sudo ufw reload提示如果你改了SSH端口sudo ufw allow 22/tcp里的22要换成你自己的端口。修改SSH端口本身是个安全手段但那是后期优化初学阶段建议先用默认端口把路子跑通。再确认SSH服务确实在监听sudo netstat -tlnp | grep 22如果看到0.0.0.0:22或:::22说明服务没问题正在监听。如果这一步没输出那SSH服务就没起来回头看教程前面的systemctl start ssh。4.3 从物理机测试连通性快速定位问题在哪一层连接不上时不要干着急。先在物理机的命令提示符winR后输cmd回车里测试到虚拟机的网络通不通ping 192.168.88.128如果ping不通问题在网络层——要么IP配错了、网段不对要么虚拟网络编辑器里VMnet8没有启用。如果ping通了但Xshell连不上问题在应用层——SSH服务没起、防火墙拦着、端口不对。这一步能帮你把问题范围缩小一大半。我见过很多人在Xshell里反复试却不先在物理机ping一下虚拟机IP绕了半天弯路。TCP/IP的网络问题和SSH应用问题完全是两条排查路线。5. Xshell连不上虚拟机时的完整排查链路这一节是全文最有价值的部分。把常见问题按从下往上的顺序列出来你照着顺序查基本能找到问题所在。我按OSI参考模型的思路来但说法尽量通俗。5.1 第一层排查虚拟机里看IP和网卡在虚拟机终端执行ip addr show如果没有看到你的网卡有IP地址比如ens33只有LOOPBACK相关状态没有inet行说明网卡没拿到IP可能原因有VMware网络适配器没有正确连接到VMnet8去虚拟机设置里看netplan配置有问题重新sudo netplan apply或sudo netplan try检查语法网卡没启用sudo ip link set ens33 up如果连网卡都不存在ip addr show看不到ens33去VMware的虚拟机设置——网络适配器里把设备状态下的启动时连接勾上或者换一个网卡类型试试把自动换成e1000e或者反过来。5.2 第二层排查物理机ping虚拟机IP在物理机cmd窗口ping 192.168.88.128ping通了走到下一层排查ping不通在物理机cmd里检查VMnet8网卡状态ipconfig找到VMnet8对应的IPv4地址看看是否和虚拟机在同一个网段前三位应该相同比如都是192.168.88.x。如果VMnet8网卡显示媒体已断开连接说明VMware的虚拟网卡服务可能有问题重启VMware或重启物理机往往可以解决。还有一个虚拟网卡常见问题VMnet1或VMnet8出现黄色感叹号。这个大概率是物理机开启了Hyper-V或WSL2或者存在VMware和其他虚拟机软件的虚拟网卡冲突比如VirtualBox。在控制面板——网络和 Internet——网络连接里禁用再启用VMnet8或者去程序和功能——启用或关闭Windows功能里关掉Hyper-V组件确定不用的前提下可以解决。5.3 第三层排查SSH服务和防火墙ping通了还连不上那问题就出在SSH服务或防火墙。在虚拟机里执行逐步验证systemctl status ssh sudo netstat -tlnp | grep 22 sudo ufw status sudo iptables -L -n | grep 22在Xshell里连接注意观察报错信息Connection refused——说明22端口没有监听SSH服务没起来Connection timed out——说明网络包被丢了多半是防火墙拦了或者IP不对Host key verification failed——说明同一IP换了SSH密钥删除Xshell会话缓存的主机密钥即可5.4 第四层排查查虚拟网络编辑器和VMnet8是否正常打开VMware的虚拟网络编辑器确认VMnet8存在的状态是已连接或已启用。如果VMnet8/VMnet1虚拟网卡出现感叹号或在物理机网络连接里看不到VMnet8通常是冲突或服务异常。这种情况下可以尝试用VMware的虚拟网络编辑器下面的更改设置按钮需要管理员权限把VMnet8删掉重新添加NAT模式网络它会重新创建虚拟网卡并分配网段。这个方法能解决不少疑难杂症但属于重拳出击动手前先确认前面几个排查步骤都做过了。5.5 一个真实客户的排查过程复盘之前有个朋友做Linux实验连不上Xshell我远程帮他排查。他说按教程改了netplanXshell提示Connection refused。我先让他ip addr show发现ens33 IP正常且是192.168.88.128没问题。又让他ping 192.168.88.128物理机能通。网络层没问题。再让他sudo netstat -tlnp | grep 22没有任何输出——好SSH服务根本没起来。让他systemctl status ssh返回Unit ssh.service could not be found原来他用的是最小化安装的Server版默认就不装SSH服务端。装上openssh-server之后问题秒解决。这个过程最能说明问题很多所谓的连接不上根本不是配置问题而是服务压根没装。所以遇到问题时先看一下SSH服务是否存在不要一上来就怀疑防火墙、怀疑网络顺序反了浪费时间。6. 三个提高连接成功率和体验的小技巧前面解决了能不能连的问题下面解决连得好不好用的问题。6.1 虚拟机重启后IP不变静态IP绑定大法前面章节里已经提过静态IP配置这里再强化一遍。配好了静态IP就不要开DHCP了把dhcp4设成false就是关闭DHCP。netplan配置里把原来的dhcp4: true改成dhcp4: false并写好addresses和routes保存后sudo netplan apply。这样即使虚拟机重启IP也会保持不变。Xshell里保存的会话只要IP不变随时能连。如果已经配置了静态IP还是经常断流检查一下设置的IP是否有冲突——同一网段里另一台设备用了相同IP。可以用arp-scan或简单的ping来排查。6.2 Windows防火墙——最容易被忽略的隐形拦截者很多人在虚拟机上各种排查最后发现是Windows系统自带的防火墙拦截了VMware相关的网络通信。在Windows的允许应用或功能通过Windows Defender防火墙里检查VMware Workstation相关项是否勾选了公用和专用。VMware在安装时一般会自动添加规则但Windows大版本更新后偶尔会重置防火墙规则导致VMnet8被拦。更保险的做法在Windows防火墙的入站规则里新建规则允许VMware相关进程的通信或允许TCP端口22的入站如果你明确知道自己的使用场景。这里要注意允许TCP端口22放的范围比较大如果只是本机到虚拟机连接加上限制条件如远程IP为192.168.xxx.0/24会更安全。6.3 Xshell的常用便捷配置Xshell连上之后有几个配置值得做终端字体默认字体偏小中文容易乱码或显示成方块。在工具——终端配色方案或会话属性里把字体改成Consolas或Microsoft YaHei Mono字号调成14~16中文显示效果会好很多命令行也不发虚。日志记录在做实验或排查问题时可以打开查看——日志或在会话属性里设置日志保存路径。Xshell会把所有屏幕输出保存下来后续回看命令输出、复盘操作记录很方便排查上一个问题的过程一目了然。命令回退目录可能你说的是Xshell命令回退目录我理解成两个意思一是选项卡左右切换CtrlTab切换会话二是Shell命令行的历史记录在命令行里按CtrlR搜索历史命令。这两个都是提升效率的好习惯。密钥登录替代密码登录用ssh-keygen生成密钥对把公钥拷贝到虚拟机~/.ssh/authorized_keys里之后在Xshell的用户身份验证里选择Public Key方法并加载私钥不但更安全而且省去每次输密码的麻烦。这些技巧看起来零散但综合起来可以大幅提升连接体验尤其是密钥登录和字体设置属于用过就回不去的一类优化。我把这套流程写下来是因为自己在初学阶段被各种问题折磨过深知没有清晰的排查思路光靠搜索碎片化知识太痛苦。从网络模式选择、固定IP配置到防火墙放行把每一步背后的为什么讲清楚以后不管换什么虚拟机软件、什么Linux发行版你都能迁移这套思路。最后我想说的是虚拟机连Xshell这件事本身并不难难的是形成一套系统的排错思维。多踩几次坑、多记录报错、多理解网络原理后面再遇到类似问题看一眼报错就知道问题出在哪一层。