尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Xshell连不上VMware虚拟机?从SSH到防火墙的完整排查指南
平时装个虚拟机练手最烦的就是一切准备就绪打开Xshell准备连上去操作结果卡在连接超时或者直接报“Connection refused”。我最早折腾VMware装Ubuntu Server的时候也在这上面卡了一整个晚上后来把网卡、防火墙、SSH服务挨个捋了一遍才彻底搞明白。这篇文章就是把这些排查思路和解决办法整理成一套可以照做的流程从服务端到客户端一步步来帮你定位到底卡在哪一环。这篇内容适合刚接触虚拟机、想在Windows上用Xshell连接VMware里Linux系统的初学者也适合那些明明配置看着没问题、但就是连不上的老哥做排查参考。文章会把常见原因拆成几个层面SSH服务本身、虚拟网络模式、IP地址配置、防火墙拦截还有Xshell客户端的兼容性设置每个环节都会给出具体的检查命令和解决步骤。1. 整体排查思路先搞清楚Xshell连不上虚拟机到底是哪一环断了1.1 连接路径拆解一条命令背后经过了多少道关卡Xshell连接虚拟机里的Linux本质上就是一次基于TCP协议的SSH远程登录。你输入ssh 用户名IP地址并回车之后这条连接请求要依次穿过这么几个环节第一环是虚拟机里的SSH服务。Linux系统默认很可能没装openssh-server或者服务没启动那么你连的就是一个根本不存在的端口系统直接拒绝。第二环是虚拟机内部的防火墙。就算SSH服务在跑防火墙规则如果没放行22端口数据包也会被悄悄丢弃表现出来就是连接超时。第三环是虚拟网络。VMware创建的虚拟网卡、NAT模式下的vmnet8网段、虚拟机的IP地址是否和这个网段匹配只要有一处对不上数据包就出不了虚拟机。第四环是Windows宿主机的网络。你本机的VMware网络适配器是否启用、IP是否正常会直接影响能不能路由到虚拟机所在的虚拟网段。第五环是Xshell这个客户端自身。版本太老导致密钥交换算法不兼容、会话配置里端口填错、SSH版本选错这些都会在最后一步把你卡住。所以排查的时候不要一头扎进某个细节里反复试而是按照“服务端有没有开 → 网络通不通 → 防火墙放没放行 → 客户端配置对不对”的顺序一层层查。我见过很多人折腾半天最后发现就是虚拟机里压根没装SSH服务端这就很尴尬。1.2 常见错误提示背后的含义Xshell连不上时会给出不同类型的报错这些报错本身就是很好的线索Connection refused请求被目标主机关闭说明数据包已经到达虚拟机但22端口没有服务在监听。优先检查SSH服务是否安装和启动。Connection timed out数据包发出去之后石沉大海没有收到任何响应。优先检查IP地址是否可达、防火墙是否拦截、网络模式是否配置正确。Host key verification failedSSH客户端检测到主机的密钥指纹和之前记录的不一致常见于虚拟机系统重装之后。在Xshell里删掉旧的会话主机密钥记录即可。No route to host路由不通检查虚拟机IP和Windows是否在同一网段。Key exchange failed/No compatible key exchange method多见于老版本Xshell连接新版OpenSSH或者反过来。需要修改SSH客户端或服务端的密钥交换算法配置。把这几个错误和你实际看到的信息对上号基本就能锁定排查方向了。下面我会按照从内到外的顺序把每个环节的具体操作展开来讲。2. 服务端准备先确认虚拟机里的SSH服务真的能连2.1 安装与启动openssh-server这一步很多人会跳过但恰恰是最常见的坑。VMware安装Ubuntu Server时如果你在安装界面没有勾选“Install OpenSSH server”装完系统后是完全没有SSH服务的。桌面版Ubuntu更干脆默认只装了客户端没有服务端。检查方法很简单在虚拟机终端里执行which sshd如果没有任何输出说明系统里没有openssh-server。不同发行版的安装命令不太一样Ubuntu/Debian系sudo apt update sudo apt install -y openssh-serverCentOS/RHEL系sudo yum install -y openssh-server装完以后启动服务并设为开机自启sudo systemctl start ssh sudo systemctl enable ssh然后确认22端口已经在监听ss -tlnp | grep 22看到类似LISTEN 0 128 0.0.0.0:22的输出说明SSH服务已经正常起来了。这里有个小细节要注意在Ubuntu上服务名可能是ssh在CentOS上可能是sshd执行systemctl status的时候别搞混了。实在记不住的话直接用systemctl list-units | grep ssh查一下实际的服务名。2.2 SSH服务配置文件的几个关键参数SSH服务正常起来了有时还是会被卡住这时候要检查/etc/ssh/sshd_config这个配置文件里几个关键项sudo vim /etc/ssh/sshd_config重点关注Port 22确认没有被改到其他端口如果改了Xshell连接时也要填对应端口。PermitRootLogin如果你打算用root账号登录这一项需要是yes或prohibit-password。Ubuntu默认禁止root远程登录建议用普通用户登录后通过sudo su切换。PasswordAuthentication必须确保是yes否则就算密码正确也会认证失败。UsePAM有些系统上PAM配置异常也会导致认证失败通常保持默认即可。改完配置文件后重启服务让配置生效sudo systemctl restart ssh我在实际操作中就遇到过PasswordAuthentication no的情况这种坑藏得很深因为服务正常、端口正常、网络正常就是输入密码后提示认证失败不看配置根本想不到是这里的问题。如果你确认密码没输错但一直认证失败优先查这一项。3. 虚拟网络配置搞清楚VMware三种网络模式的区别3.1 NAT模式、桥接模式、仅主机模式怎么选VMware虚拟机的网络设置里有NAT、桥接、仅主机三种模式很多人都是随便选一个导致IP网段对不上Xshell自然连不上。这三种模式核心区别在于桥接模式Bridged虚拟机和宿主机在同一个局域网里拥有独立的IP地址相当于局域网里多了一台真实电脑。如果虚拟机IP和宿主机IP不在同一网段或者交换机开了端口隔离就通不了。好处是网络行为和真实机器完全一致。NAT模式推荐虚拟机通过宿主机共享IP上网VMware会创建一个虚拟子网默认是192.168.x.0网段虚拟机的IP必须在这个网段内网关指向vmnet8虚拟网卡的网关通常192.168.x.2。这种模式下虚拟机可以上网宿主机也能访问虚拟机配置最省心。仅主机模式Host-Only虚拟机只能和宿主机通信不能访问外网相当于一个完全隔离的内网环境。学习用没问题但虚拟机里如果需要联网装软件就麻烦了。日常学习和测试优先选NAT模式。桥接模式能玩出更多花样但需要你对局域网环境有足够的把握。仅主机模式一般用于调试网络或做隔离实验。3.2 VMware虚拟网络编辑器配置要点确认虚拟机选的是NAT模式后打开VMware的菜单栏编辑 → 虚拟网络编辑器。这里有一个关键检查点选中NAT模式对应的vmnet8条目查看右下角的子网IPSubnet IP比如192.168.88.0或192.168.111.0。然后点击“NAT设置”确认网关IP通常是192.168.x.2。你要保证虚拟机里的IP地址和这个子网段一致。举个例子如果vmnet8的子网是192.168.88.0网关是192.168.88.2那虚拟机的静态IP可以设为192.168.88.128掩码255.255.255.0网关192.168.88.2。有个容易忽略的地方VMware默认启用“使用本地DHCP服务将IP地址分配给虚拟机”但如果之前你手动设置过虚拟机的静态IP和DHCP分配的IP冲突了也会导致网络异常。我的建议是既然用NAT模式学习干脆给虚拟机配静态IP省得每次开机IP都变化Xshell会话里的IP就要跟着改来改去。3.3 主机侧VMware网络适配器检查光看VMware里的配置还不够Windows宿主机这边也要确认。按下Win R输入ncpa.cpl回车打开网络连接面板找到VMware Network Adapter VMnet1和VMware Network Adapter VMnet8这两个虚拟网卡。如果这两个适配器被禁用了虚拟机网络必挂。另外一个常见问题是VMnet8网卡显示“未识别的网络”或者IP是169.254.x.x开头Windows未能从DHCP获取到地址。这时候可以尝试右键禁用再启用该网卡或者检查VMware DHCP服务是否正常运行。在Windows服务管理器Win R 输入services.msc里找到VMware DHCP Service和VMware NAT Service这两个服务确认它们处于“正在运行”状态启动类型最好是“自动”。这两个服务是NAT模式下虚拟机上网和宿主机通信的关键被精简版VMware关掉的情况我见过太多次了。4. 网络连通性排查从虚拟机到宿主机逐层ping通4.1 虚拟机内的IP地址检查与配置SSH服务装好、网络模式选对之后接下来要确认虚拟机里的IP地址到底是多少。在虚拟机的终端里执行ip addr show找到你当前活跃网卡的地址通常是ens33、ens160或eth0看看IP是否在vmnet8对应的网段内。比如vmnet8的子网是192.168.88.0虚拟机IP是192.168.88.128这就对上了。如果你之前用的是DHCP自动获取但获取到的IP不在虚拟网段内或者干脆没有获取到就需要手动配置静态IP了。Ubuntu系统从17.10版本开始用netplan配置文件管理网络修改/etc/netplan/目录下的yaml文件sudo vim /etc/netplan/00-installer-config.yaml参考配置network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.88.128/24 routes: - to: default via: 192.168.88.2 nameservers: addresses: - 8.8.8.8 - 223.5.5.5注意网卡名要改成你自己的实际名称网关地址要和你VMware里NAT设置的网关一致。配置完成后应用变更sudo netplan applyCentOS系统则修改/etc/sysconfig/network-scripts/ifcfg-ens33之类的网卡配置文件设置BOOTPROTOstatic然后手动填下IPADDR、GATEWAY、NETMASK、DNS1这些字段改完重启网络服务sudo systemctl restart network4.2 逐层ping定位断点在哪配置好IP之后按照从内到外的顺序测试连通性第一步在虚拟机里ping自己的IP确认网卡工作正常ping 192.168.88.128第二步ping网关确认虚拟机和宿主机之间的链路通不通ping 192.168.88.2第三步ping宿主机VMnet8网卡的IP。在Windows的cmd里执行ipconfig找到VMware Network Adapter VMnet8的IPv4地址然后在虚拟机的终端里ping它。第四步在Windows的cmd里反过来ping虚拟机的IPping 192.168.88.128如果第四步能通说明从宿主机到虚拟机的网络链路是通的。如果这一步都通了但Xshell还是连不上那问题大概率不在网络上回头检查SSH服务和防火墙就行。4.3 从Xshell连接时填的IP地址到底该怎么选很多人卡在Xshell连接超时是因为根本不知道应该填哪个IP。这里明确一下如果你用的是NAT模式填虚拟机的IP地址也就是你在虚拟机里看到的内网IP不是宿主机IP更不是VMware虚拟网卡VMnet8的IP。我见过一个很典型的错误在Xshell会话里填的是VMnet8网卡的地址那连的是Windows宿主机本身当然不会出SSH登录界面。虚拟机的IP地址是虚拟机内部那一块网卡上的地址外形上是一串192.168.x.x或10.x.x.x之类的内网段IP只有进到虚拟机里面查才拿得到。另外补充一点如果你在用WSL2或者Windows自带的Hyper-V虚拟机网络原理和VMware不一样。WSL2默认走的是NAT转换从Windows宿主机访问WSL2里的SSH服务需要配置端口转发或者在.wslconfig里设置networkingModemirrored镜像网络模式直接用localhost访问。这个场景比较特别如果发现session连接超时可以先检查WSL2里SSH服务是否在监听再看Windows能否访问那个IP。5. 防火墙排查这层“隐形墙”经常让人头疼5.1 Ubuntu的ufw配置如果你的网络链路已经通了但Xshell始终连不上防火墙就是下一个重点怀疑对象。Ubuntu系统自带ufwUncomplicated Firewall默认可能是关闭状态也可能之前哪次操作时被打开了。查看防火墙状态sudo ufw status看到Status: inactive说明防火墙没开那就不是这里的问题。看到Status: active说明防火墙在运行需要放行22端口sudo ufw allow 22/tcp或者更直接一点允许SSH服务的完整配置sudo ufw allow OpenSSH修改后防火墙规则会自动生效无需重启服务。5.2 CentOS的firewalld配置CentOS系统默认的防火墙管理工具是firewalld检查方式和Ubuntu不太一样sudo systemctl status firewalld如果防火墙在运行查看当前放行的端口sudo firewall-cmd --list-all放行22端口sudo firewall-cmd --add-port22/tcp --permanent sudo firewall-cmd --reload如果是生产环境学习建议精确到端口放行别图省事直接firewall-cmd --add-servicessh。两者最终效果差不多但按端口放行更便于你理解规则的含义。5.3 再顺手排查一下SELinuxCentOS用户还要多留个心眼SELinux会拦SSH。如果sshd服务正常、防火墙也放行了但连接还是被拒绝检查一下SELinux状态getenforce如果输出的是Enforcing可以临时设为Permissive模式试一下sudo setenforce 0如果切到Permissive模式后Xshell立刻就能连上了说明问题确实出在SELinux的某些布尔值配置上。对于纯学习用途的虚拟机我一般建议直接修改/etc/selinux/config文件把SELINUXenforcing改成SELINUXdisabled但生产环境千万不要这么干。6. Xshell客户端侧排查版本、协议、会话配置6.1 版本和密钥交换算法兼容性问题Xshell连接不上虚拟机还有一个容易被忽略的点Xshell的版本和虚拟机里OpenSSH的密钥交换算法不兼容。新版OpenSSH比如8.8以上默认不再支持ssh-rsa签名算法老版本Xshell连上去就会报No compatible key exchange method或者Key exchange failed。解决办法有三个方向第一个升级Xshell到最新版本。个人使用Xshell 7、Xshell 8都是免费的官方下载页面就能拿到。新版对OpenSSH的算法支持更完整基本不存在兼容问题。第二个在虚拟机里的/etc/ssh/sshd_config中临时恢复旧算法支持sudo bash -c echo KexAlgorithms diffie-hellman-group14-sha256 /etc/ssh/sshd_config sudo systemctl restart ssh注意这是临时救急方案有安全隐患测试完最好删掉。第三个如果你不想动服务端也可以改Xshell的会话属性。在会话的“属性 → 连接 → SSH → 安全”里勾选兼容的密钥交换算法。不过这个操作在不同版本的Xshell里位置不太一样比较费时间我还是建议直接换新版。6.2 会话配置检查清单Xshell连接失败时对照检查一下会话配置里的这几项主机地址填的确实是虚拟机的IP不是宿主机IP或VMnet8地址。端口号是22除非你确实改过SSH端口。协议选择的是SSH不是TELNET或RLOGIN。用户名填的是虚拟机里存在的用户名不是Windows用户名。密码正确没有大小写混淆或者多余空格。另外有一个特别容易踩的坑如果你用Xshell连接的是另一台机器的SSH隧道中转而不是直连虚拟机那还需要检查中间主机的状态。不过对于VMware虚拟机学习场景一般都是直连不用考虑隧道。6.3 第一次连接时的主机密钥校验Xshell第一次连接目标主机时会弹出“SSH主机密钥”确认窗口让你确认接受主机的密钥指纹。很多新人会在这里卡住不知道该怎么处理还有人会不小心点错导致后续连接报错。如果是第一次连接确认IP地址没填错直接点接受并保存即可。如果之前连接过但虚拟机重装系统之后出现了Host key verification failed那就需要删除Xshell里保存的旧密钥。操作路径是菜单栏“工具 → 主机密钥管理器”在列表里找到对应的IP删除掉然后重新连接。这里我要多说一句出现主机密钥不匹配最直接的原因一般是虚拟机系统重装或SSH服务重新生成密钥。如果确认这条连接是你自己的虚拟机删掉旧记录重新接受即可。但如果是在连接一台不是你管理的服务器时出现这个提示就要警惕是否存在中间人攻击了。6.4 Xshell常见界面问题中文乱码和字体连接上之后如果发现终端里的中文变成乱码不是网络问题是编码设置问题。在Xshell的会话属性里找到“终端 → 编码”设置为UTF-8。大多数新版Linux系统默认locale是UTF-8这里保持一致就好了。字体设置则是在“工具 → 选项 → 查看”里调整选一个支持中文的等宽字体比如Consolas或Courier New字号按个人偏好设置。这些属于锦上添花的调整不影响连接本身。7. 问题排查速查表与个人心得7.1 问题汇总速查表问题现象可能原因排查方法解决办法Connection refusedSSH服务未运行或未安装ss -tlnp | grep 22安装并启动openssh-serverConnection timed out网络不通或IP不在同网段检查VMnet8网段与虚拟机IP修改虚拟网络编辑器或配置静态IPConnection timed out防火墙拦截22端口sudo ufw status/systemctl status firewalld放行22端口ufw allow 22/tcpHost key verification failed主机密钥记录与当前不一致查看Xshell主机密钥管理器删除旧密钥记录重新连接Key exchange failed算法不兼容检查Xshell版本和Linux的OpenSSH版本升级Xshell或调整KexAlgorithmsPassword authentication failed密码错误或PasswordAuthentication为no确认密码输入、检查sshd_config修正配置重启ssh服务No route to host虚拟机IP路由不匹配查看路由表ip route检查并修正网关配置7.2 几个实际踩过的坑配置静态IP时确保虚拟机里的DNS解析正常。很多人只设置IP和网关不设置DNS导致虚拟机能ping通IP但ping不通域名。Xshell是做SSH登录的走的是IP所以DNS不影响连接但如果后续要在虚拟机里装软件或更新源DNS配置错误会让你折腾半天。还有一次我遇到的情况是VMware网络适配器VMnet8在Windows里显示黄色感叹号IP是169.254.x.xWindows自己无法从VMware DHCP服务获取到地址。最后的解决办法是把VMware的三个核心服务全部重启一遍再把vmnet8网卡禁用再启用感叹号就消失了。VMware的虚拟网卡服务和Windows网络栈偶有冲突这个操作路径基本能解决大多数宿主机侧的问题。最后提一下不要装那种所谓“精简版”或“绿色版”的VMware这类版本经常把DHCP服务、NAT服务等核心组件精简掉导致各种莫名其妙的问题。去官网下载完整安装包按默认配置走一遍能省掉一堆排查时间。7.3 Xshell的平替方案与扩展建议如果Xshell本身授权或安装出了问题实在不想折腾也可以考虑几个平替工具较新版本Windows自带的Terminal配合ssh命令可以直接连接开源工具MobaXterm和FinalShell都很方便自带SFTP文件管理和多标签页。但个人体验下来Xshell在网络管理和会话快照方面还是顺手一些不到万不得已不用换。连接成功之后还可以给虚拟机配置SSH密钥登录做到免密直接进系统省去每次输密码的麻烦。生成密钥对、把公钥放进虚拟机的~/.ssh/authorized_keys里这个流程也是一个值得掌握的技能配合Xshell的密钥管理功能比输密码舒服得多。7.4 一个小技巧开机自动启动SSH服务很多人虚拟机里SSH服务开着重启虚拟机之后又自动连不上了其实是没有设置开机自启。Ubuntu和CentOS都用systemd管理服务设置一次sudo systemctl enable ssh执行之后SSH服务会随开机自动启动不用每次重启虚拟机再去手动start。这一个配置能省掉后续很多麻烦建议装完系统第一时间就设置好。踩过几次坑之后我现在装虚拟机的流程固定就是安装系统时勾选OpenSSH server → 开机后设置静态IP → 开启SSH服务自启 → Windows这边ping通虚拟机 → 打开Xshell直连。整套走下来基本没有连不上的情况。如果你按这篇文章的排查步骤走到了最后一步还是有问题可以检查一下使用的VMware版本和Windows版本组合比如某些新版Windows更新后和VMware虚拟网卡驱动存在兼容问题这种情况可以尝试更新VMware到最新版或者在Windows的“可选功能”里关闭Hyper-V相关的虚拟机平台组件和VMware共存时这两个虚拟化平台有时候会打架。
RELATED

相关推荐

树莓派B+环境监测实战:换源、DHT22与Flask Web服务器

树莓派B+环境监测实战:换源、DHT22与Flask Web服务器

简介:面向树莓派 B 初学者的实用资料包,围绕换源、中文显示、DHT22 温湿度驱动、搭建 Web 服务器四个典型场景展开,适合物联网、嵌入式、自动化等方向的在校生或课程设计使用。包内每个 demo 都配有 docx 操作文档,并附可运行 Pyt…

📅 2026/9/16 18:34:07
tsparticles confetti 彩带特效包全解析:从 CHANGELOG 看版本演进、API 设计与实现原理

tsparticles confetti 彩带特效包全解析:从 CHANGELOG 看版本演进、API 设计与实现原理

tsparticles confetti 彩带特效包全解析:从 CHANGELOG 看版本演进、API 设计与实现原理 【免费下载链接】tsparticles tsParticles - Easily create highly customizable JavaScript particles effects, confetti explosions and fireworks animations and use them…

📅 2026/9/16 18:34:07
STM32驱动DHT11的底层时序与GPIO模式切换实战

STM32驱动DHT11的底层时序与GPIO模式切换实战

简介:本资源是一份面向STM32嵌入式初学者与课程设计学生的完整实践项目,聚焦DHT11数字温湿度传感器在ARM Cortex-M3平台(STM32F103)上的驱动开发与LCD可视化应用。资源提供从硬件连接、底层时序解析到GUI显示的全链路实现&#xf…

📅 2026/9/16 18:34:07
MORE NEWS

更多资讯

📰

WPS在Linux下打不开中文文件?KDE桌面启动器修复指南

如果你也是在 Arch Linux 上装 KDE 当主力桌面,又习惯用 WPS 打开同事发来的docx、xlsx、pptx,大概率迟早会撞见这个对话框:WPS 突然弹出来一句“无法找到“”。请检查文件名的拼写,并检查文件位置是否正确。”。我第一次看到的时…

📰

MATLAB实现改进型SEIR3疫情传播模型与参数敏感性分析

简介:本资源是一套面向流行病学建模研究者与公共卫生数据分析学习者的改进型SEIR疫情仿真方案,聚焦COVID-19传播动力学分析,提供可复现、可调参的MATLAB实现框架。压缩包共106个文件,含103份PDF技术文档(含全国每日疫情…

📰

Linux动态库undefined symbol定位与修复实战

上周三晚上十一点,同事在群里甩了一张截图,程序启动直接抛出error while loading shared libraries: libparse.so: undefined symbol: _Z8parse_docPKc,后面跟了一句:本地机器编得好好的,怎么一到部署环境就炸了。这种…

📰

OpenCV轮廓匹配实战:用Hu矩实现5分钟形状识别

开头先聊点实在的。做图像处理这些年,形状识别算是我被问到最多的需求之一:分拣线上的零件方向对不对、PCB板上的元件有没有放反、OCR之前先把目标区域定位出来……这些场景看起来五花八门,但落到OpenCV层面,核心思路高度一致——…

📰

基于ZYNQ的FPGA DDS信号发生器设计与实现

简介:面向FPGA开发者的ZYNQ7100 DDS信号发生器完整工程,主控芯片采用XC7Z100FFG900-2,基于Vivado环境开发实现。工程代码可直接编译运行,并支持向XC7Z100系列其他芯片移植,适合需要快速搭建任意波形发生器或学习ZYNQ平…

📰

内网HTTPS部署:用openssl自签名证书解决Chrome“不安全”提示

内网部署HTTPS:用openssl自签名证书,一次搞定Chrome“不安全”提示先说说我为什么折腾这事。公司内网有套业务系统,一直走HTTP,后来要对接一些对安全性有硬性要求的接口,加上审计也盯得紧,必须上HTTPS。公网…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬