十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

MobaXterm连不上VMware中CentOS 7?从网络到sshd的完整排查指南

MobaXterm连不上VMware中CentOS 7?从网络到sshd的完整排查指南 MobaXterm连不上VMware里的CentOS 7这事我太熟了。前前后后帮同事排查过不下二十次自己也踩过几回坑绝大多数情况下问题都出在虚拟机网络配置和sshd服务这几块真正是VMware或者MobaXterm本身故障的反倒很少。这篇文章我就按实际排查的顺序把从现象到解决的完整链路梳理一遍你照着一步步来基本十分钟内能把问题定位清楚。先说个扎心的事实MobaXterm提示“Connection refused”和提示“Network is unreachable”或者“Connection timed out”对应的病因是完全不同的。前者说明网络是通的但22端口没有服务在监听大概率是sshd没装或者没启动也可能是防火墙把端口拦了。后者说明压根找不到那台机器要么是IP地址不对要么是虚拟机和宿主机不在同一个网段要么是VMware的网络服务挂了。别急着去网上搜五花八门的答案先看清楚报错原文这能帮你省下一半的时间。1. 第一步先分清到底是网络不通还是服务没起来先做最基础的连通性测试。在MobaXterm的本地终端里直接ping一下虚拟机的IP然后顺手测一下22端口。ping 192.168.x.x telnet 192.168.x.x 22这里有个容易误导人的细节ping通了并不代表SSH一定通。ping走的是ICMP协议SSH走的是TCP 22端口两者是独立的。我见过很多人在网上说“能ping通但连不上”其实这个描述本身就说明问题——ICMP通说明IP层可达问题大概率在传输层端口被防火墙挡了或者sshd没在监听。如果连ping都不通那就要往网络层去查。这两条路往下走的方向完全不同所以第一步一定是先跑这两个命令。如果telnet显示“Connection refused”恭喜网络是通的问题在CentOS 7内部的sshd服务上。如果telnet一直卡在那里不动最后报“Connection timed out”那十有八九是防火墙在DROP包或者中间有个环节把小流量拦了。如果直接“No route to host”或者“Network is unreachable”那就不是服务的问题了是整个网络的连通性都不对。提示telnet命令在Windows 10/11上默认是没装的如果提示“telnet不是内部或外部命令”去“控制面板-程序-启用或关闭Windows功能”里勾上“Telnet客户端”就行也可以在MobaXterm自带的WSL终端里跑同样的命令。2. 第二种常见病因sshd服务没装、没启动或者被防火墙拦了ping通了telnet 22端口报Connection refused这种case我遇到过大概三分之一。原因很直白CentOS 7最小化安装的时候默认是不装sshd相关的配置的或者装了但服务没起来。有些精简版镜像甚至直接没装openssh-server。你需要在虚拟机里先装好再启动。# 检查是否安装 rpm -qa | grep openssh-server # 安装没有的话 yum install -y openssh-server # 启动并设置开机自启 systemctl start sshd systemctl enable sshd # 确认在监听 netstat -tlnp | grep 22netstat那一步很关键。如果能看到类似“sshd 0.0.0.0:22”的输出说明服务已经在监听了。如果只有127.0.0.1:22那就是只监听了回环地址外部连不进来这种情况在有些定制镜像里会出现需要改一下/etc/ssh/sshd_config里的ListenAddress配置。防火墙这条线也不要跳过。CentOS 7默认用的是firewalld虽然新装系统默认是开启的但很多人之前为了装其他软件顺手关过又开了规则乱了也不奇怪。我一般直接用最稳的方式验证——临时把防火墙停掉再连一次如果能连上那就是防火墙规则问题再精确定位规则systemctl stop firewalld systemctl start sshd # 确认没问题后再添加永久规则 firewall-cmd --permanent --add-servicessh firewall-cmd --reload顺带提一嘴SELinux这个坑在CentOS 7上非常典型。如果sshd配置改过比如改了端口、改了监听地址SELinux的布尔值没跟着调整就会导致sshd启动正常但连不上。最简单的排查方式执行setenforce 0临时关闭SELinux再试一次如果能连了那就要去查SELinux的ssh相关策略。不过生产环境不建议长期关闭SELinux测试机随意。3. 第三种高频病因IP地址不对或者虚拟机压根没拿到IP这个场景太常见了VMware里装完CentOS 7是能上网的但重启之后IP变了或者一开始就没配置IPMobaXterm里填的还是旧地址。之前帮一位朋友排查他信誓旦旦说“我昨天还能连今天就不行了”结果一查虚拟机的IP从192.168.44.128变成了192.168.44.135他填的还是老地址。进入虚拟机先确认当前的IP到底是什么ip addr show或者ifconfig如果eth0或ens33下面没有inet这一项说明网卡没拿到IP需要检查网卡配置文件。如果拿到的是169.254开头的地址说明DHCP没给你分配IP多半是VMware的网络服务出问题了。如果拿到的是192.168.x.x或10.x.x.x的地址先把这串数字抄下来填到MobaXterm里。CentOS 7里网卡配置文件在/etc/sysconfig/network-scripts/ifcfg-ens33网卡名可能不一样以ip addr里显示的为准。很多人配置的时候容易漏掉这个关键项ONBOOTyesCentOS 7默认安装之后如果没手动改过这里很可能写着ONBOOTno。这种情况下网卡在开机时不会自动激活DHCP也不会跑自然拿不到IP。改完之后执行systemctl restart network再执行ip addr show确认有IP了。如果不想手动给静态IP确保BOOTPROTOdhcp然后重启网络服务就行。建议虚拟机装完系统第一件事就是给网卡配置一个固定的静态IP别用DHCP。动态IP在重启后很容易变改了之后MobaXterm里的session就要跟着改纯属给自己找麻烦。静态IP配置方法很简单BOOTPROTOstatic然后加IPADDR192.168.x.x、NETMASK255.255.255.0、GATEWAY192.168.x.1、DNS18.8.8.8重启网络即可。4. 第四种高频病因VMware网络模式与宿主机防火墙的隐形冲突这是网上讨论最少、但实际发生频率很高的一类问题。VMware的虚拟网络编辑器里有三种模式桥接模式Bridged、网络地址转换模式NAT、仅主机模式Host-only。我第一次给虚拟机配网络时选了NAT虚拟机自己能上网宿主机ping不通它MobaXterm也连不上。后来才发现是Windows防火墙把VMnet8的入站请求默认拦掉了。NAT模式下虚拟机的流量通过VMnet8虚拟网卡转发宿主机和虚拟机之间的通信也要走这张虚拟网卡。Windows防火墙会拦截来自虚拟网卡的入站连接尤其是在装了第三方安全软件后这种情况更常见。排查办法很暴力但有效把Windows防火墙临时关掉再用MobaXterm连一次。如果能连上就说明是防火墙的问题这时候去“Windows Defender防火墙-高级设置-入站规则”里放行VMnet8网卡的所有流量即可不用把整个防火墙关掉。桥接模式的问题则完全相反。如果你选了桥接虚拟机直接挂在宿主机所在的物理局域网上此时如果出现能ping通宿主机但连不上虚拟机的情况问题多半出在物理网络环境——比如公司Wi-Fi开启了AP隔离或者路由器绑定了MAC地址过滤。这些外部因素改不了老老实实换回NAT模式最省心。VMware自己的网络服务也会抽风。我遇到过一次很诡异的现象VMware NAT Service服务进程死了虚拟机无法访问外网但宿主机ping虚拟机还是通的。这种半通不通的状态最坑人很容易误判。排查方式很直接# 在Windows下用管理员权限执行 net start | findstr VMware正常应该有VMware Authorization Service、VMware DHCP Service、VMware NAT Service三个服务。如果少了NAT或者DHCP在“服务”管理界面里启动它们不行就重启VMware Workstation。如果重启后还是不正常试试“虚拟网络编辑器”里的“恢复默认设置”但注意这会把所有自定义的网络配置清掉操作前先截图留底。5. MobaXterm端设置容易忽略的几个细节排除了虚拟机和网络层面的问题后如果还是连不上就得回头审视MobaXterm这边的设置了。这部分的坑比较隐蔽报错提示也不直观容易被忽略。端口号不对。我见过不止一个人习惯性填了22但实际CentOS上sshd改过端口比如改成2222了。如果你不确定虚拟机那边的sshd是不是改过端口进虚拟机的/etc/ssh/sshd_config查一下Port那行默认是22。如果被修改过把MobaXterm里的端口改成对应值即可。用户名填错了。MobaXterm新建会话时默认用户名是当前Windows用户名如果你没改它就会用这个名字去连CentOS。可虚拟机里可能压根没有这个用户。进虚拟机的CentOS执行whoami看看当前登录的是哪个用户然后用这个用户名重新配置MobaXterm的session。最简单的方式是MobaXterm登录界面先选“Specify username”填root或者其他实际存在的用户名。**认证方式不匹配。**很多人在MobaXterm里选了“Use private key”但虚拟机那边压根没配公钥认证或者密钥格式不对OpenSSH需要的是OpenSSH格式PuTTY生成的是PPK格式。初次使用不建议一上来就折腾密钥认证先用密码方式把连接跑通之后再研究免密登录。网络类型选错了。如果你在MobaXterm里建的是WSL会话、Windows会话或者其他类型而不是SSH类型那当然连不上虚拟机。这个属于低级错误但确实发生过尤其是从别处复制session的时候容易带偏。6. 实操排查路径一次正常的排障流程参考上面把各类原因都摆出来了实际排查时关键是形成一套有序的流程不要跳着来。我一般在遇到MobaXterm连接失败时按下面的顺序走基本不超过五分钟定位问题看MobaXterm报错原文判断是“refused”“timeout”还是“unreachable”。打开VMware进入CentOS虚拟机执行ip addr show确认当前IP在Windows命令行ping虚拟机的IP——不通查VMware网络服务和网卡模式通了走第4步用telnet测试虚拟机的22端口——不通查防火墙和sshd通了走第5步使用MobaXterm重新建一个SSH连接确认用户名、密码、端口、网络类型无误后重试。如果还是失败直接在CentOS里执行journalctl -u sshd -n 50查看sshd日志里面有大量的线索。有一次遇到个很刁钻的问题CentOS 7能ping得通宿主机telnet 22端口也通但MobaXterm一连接就报“Connection closed by remote host”。在sshd日志里看到fatal: Access denied for user root by PAM account configuration查了一圈发现是/etc/security/access.conf里限制了root的登录来源。这类问题如果不是日志提示基本很难猜到所以无论遇到什么奇怪的报错先去翻sshd日志准没错。日志查看命令journalctl -u sshd -n 50或者老一点的系统tail -20 /var/log/secure7. 常见问题快查表把上面所有的情况整理成一张表以后遇到问题直接对照定位报错关键字可能原因优先排查方向Connection refusedsshd未启动/未安装或防火墙拒绝连接systemctl status sshd、firewalld规则Connection timed out网络不通、防火墙DROP、IP错误ping、VMware网络模式、Windows防火墙No route to host目标不可达多半是IP段不一致VMware虚拟网络编辑器、网卡配置Connection closed by remote hostsshd配置限制、SELinux拦截、PAM限制/var/log/secure、/etc/ssh/sshd_configNetwork is unreachable虚拟机网卡未配置IP或网关错误ifcfg-ens33中的IPADDR、GATEWAY、ONBOOTHost key verification failedMobaXterm缓存了旧的公钥MobaXterm里删除旧session重新连接Permission denied用户名或密码错误或密钥不对用户名拼写、root登录限制、密钥格式最后一行的“Host key verification failed”补充一下这是重装系统后最容易遇到的虚拟机的系统重装了IP和用户名密码都对但MobaXterm的known_hosts里还存着之前那台机器的公钥指纹所以报错。解决方式是在MobaXterm的session列表里右键那条连接选择“Edit session”在“Network settings”里点击“SSH keepalive”旁边的“Reset”按钮或者直接删掉那个连接重新建这里不再展开遇到时知道有这回事就行。8. 一些建议与心得VMware里CentOS 7的连接问题其实是一个比较典型的“虚拟化网络三层问题”——物理网络层、虚拟机虚拟网络层、操作系统内部网络栈。每一层都有自己的影响因素排查的本质就是分层定位找到断点在哪一层。如果看完上面这些还没解决你的问题那多半是遇到了比较特殊的场景——比方说公司电脑用了域管理策略Windows防火墙设置被组策略锁定或者VMware版本太老和Windows 10/11的Hyper-V共存产生了冲突再或者虚拟机设定了固定IP、但网卡没有启用“允许此设备唤醒计算机”之类的底层参数。这些属于边缘情况但也不是不可能遇到。我在实际使用中养成了一个习惯虚拟机的网卡配置固定好之后把ifcfg-ens33文件备份一份VMware的网络设置截图存档MobaXterm的session定期导出备份Tools-Export sessions。这套习惯帮我省了不少重复劳动也推荐给你。再分享一个小技巧搞不定的时候在MobaXterm里用“MobaSSHTunnel”建一次端口转发测试或者直接用ssh -v 用户名IP地址跑一个详细的调试连接把verbose输出贴给搜索引擎往往能比你自己瞎猜更快找到答案。SSH的-v参数会在连接过程中打印出各阶段的具体状态加密算法协商、密钥交换、认证方式全部看得清清楚楚比MobaXterm界面里的报错信息丰富太多了。
返回列表