服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-12 简米科技 4,250 字 10 分钟阅读

VMware虚拟机SSH连接失败怎么办,连接被拒绝是什么原因?

导读vmware虚拟机ssh连接失败,多数情况下是网络模式选错、虚拟机IP与宿主机不通或sshd服务未启动所致,按照下面的排查顺序基本都能解决,排查vmware虚拟机ssh连接失败的常见原因碰到ssh连不上虚拟机,别急着重装系统,先冷静想一下,问题大概率出在三个地方:网络不通、服务没开、防火墙拦截,我见过不少朋友折……

vmware虚拟机ssh连接失败,多数情况下是网络模式选错、虚拟机IP与宿主机不通或sshd服务未启动所致,按照下面的排查顺序基本都能解决。

排查vmware虚拟机ssh连接失败的常见原因

碰到ssh连不上虚拟机,别急着重装系统,先冷静想一下,问题大概率出在三个地方:网络不通、服务没开、防火墙拦截,我见过不少朋友折腾半天,最后发现是虚拟机IP压根没对。

先确认虚拟机里的sshd服务是否在运行

很多人第一反应是去看网络,其实最容易被忽略的是sshd服务本身,如果你装的是最小化CentOS或者Ubuntu Server,默认可能没装openssh-server,或者服务没启动,在虚拟机终端里执行:

systemctl status sshd

如果提示Unit sshd.service not found,说明根本没装,安装一下:

yum install -y openssh-server   # CentOS/RHEL
apt install -y openssh-server   # Ubuntu/Debian

然后启动并设置开机自启:

systemctl start sshd
systemctl enable sshd

检查虚拟机IP和宿主机是否在同一网段

ssh连不上的另一个高频原因是IP不在同一个网段,在虚拟机里执行:

ip addr show

或者老命令ifconfig,重点看你的IP地址,比如是168.1.100,而宿主机是168.1.5,那没问题,如果虚拟机IP是168.x.x而宿主机是x.x.x,这就不是ssh的问题,是网络隔离的问题。

这里有个常见的误区:很多人用NAT模式,虚拟机IP是168.44.128,宿主机的VMnet8网卡IP是168.44.1,这两个能通,但宿主机物理网卡IP可能是168.1.2,你从宿主机ssh虚拟机,应该先ping虚拟机的IP,而不是ping物理网卡地址。

防火墙和SELinux是否拦截了22端口

即便sshd服务正常,防火墙也可能拦你,在虚拟机里检查:

systemctl status firewalld

如果开着,放行22端口:

firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

Ubuntu的话,用ufw:

ufw allow ssh

还有SELinux,CentOS默认是enforcing,虽然它通常不拦ssh,但有时候polkit规则会抽风,临时关闭看看:

setenforce 0

如果关闭后能连了,说明SELinux策略有问题,再慢慢调整。

VMware虚拟机SSH连接失败怎么办,连接被拒绝是什么原因?

vmware虚拟机ssh连接失败怎么解决?一步一步来

上面是排查思路,下面是具体操作路径,建议按顺序执行,每一步都有输出,能快速定位问题。

第一步:从虚拟机内部测试本机回环

先在虚拟机里执行:

ssh localhost

如果这都失败,说明sshd配置有问题或者服务没起来,看看日志:

journalctl -u sshd -n 50

常见错误是Host key verification failed,删掉旧的known_hosts再试,如果是Permission denied (publickey,password),检查/etc/ssh/sshd_config里面的PasswordAuthentication yes是否被注释。

第二步:测试宿主机到虚拟机的连通性

在宿主机命令行里 ping 虚拟机的IP:

ping 192.168.xxx.xxx

如果ping不通,看下面两部分,如果通了但ssh还是连不上,多半是端口问题,用telnet测一下22端口:

telnet 192.168.xxx.xxx 22

或者用nc:

nc -vz 192.168.xxx.xxx 22

如果端口不通,回虚拟机里确认sshd监听的地址,执行:

netstat -tlnp | grep :22

看到0.0.0:22是正常的,如果是0.0.1:22,那就只监听本机了,改sshd_config里的ListenAddress。

第三步:调整VMware网络模式

vmware虚拟机ssh连接失败的场景里,NAT和桥接模式有着明显区别,这里你先搞清楚当前用的是哪种模式,在虚拟机右上角或者VMware菜单栏的"虚拟机"->"设置"->"网络适配器"里能看到。

  • NAT模式:虚拟机通过宿主机上网,虚拟机的IP通常以168.x.x开头,需要和VMnet8处于同一网段。
  • 桥接模式:虚拟机直接接入物理局域网,IP和宿主机物理网卡在同一网段,能和其他局域网设备互相访问。
  • 仅主机模式:只能和宿主机通信,没有外部网络。

很多ssh连接失败,就是NAT模式下,虚拟机IP被分配成了168.44.x,但你在宿主机直接用物理网卡的IP去连,自然连不上,正确做法:在宿主机上ping虚拟机的168.44.x地址,能通再用ssh连接。

第四步:虚拟网络编辑器还原默认设置

VMware虚拟机SSH连接失败怎么办,连接被拒绝是什么原因?

如果NAT模式下IP都不对,打开VMware的"编辑"->"虚拟网络编辑器",点击右下角的"更改设置",然后选中VMnet8,点击"还原默认设置",这一步能重置DHCP分配规则,一般能解决IP冲突或网段混乱的问题。

还原之后,虚拟机里重启网络:

systemctl restart network

或者用dhclient重新获取IP,注意,重启后IP可能变了,重新查一下。

vmware虚拟机桥接模式与NAT模式ssh连接对比

很多人在选模式上栽跟头,我自己测试过,同样是宿主机连着WiFi,桥接模式下虚拟机直接获取路由器分配的IP,比如168.1.150,宿主机是168.1.2,ssh连接很顺畅,但NAT模式下,虚拟机IP是168.44.130,宿主机要连这个IP,必须走VMnet8网卡,如果VMnet8没配置好,就失败。

对比项 桥接模式 NAT模式
虚拟机IP网段 与宿主机物理网卡同一网段 通常是VMnet8专用网段(如192.168.44.x)
宿主机ssh连接方式 直接ping虚拟机IP 通过VMnet8网关(192.168.44.1)转发,需要VMnet8配置正确
局域网其他设备访问 可以,只要路由允许 较困难,需要做端口映射
虚拟机能否上网 取决于物理网络 可以,通过宿主机NAT
常见失败原因 物理网络禁用了DHCP,虚拟机没获取到IP VMnet8网段冲突,宿主机VMnet8网卡未启用

行业共识认为,在宿舍或家里用WiFi的环境下,桥接模式容易因为路由器AP隔离导致互访失败,此时NAT模式反而更稳,如果你遇到vmware虚拟机ssh连接失败的麻烦,可以先切到桥接模式试试,让虚拟机直接暴露在局域网里。

不过要注意,校园网或办公网有时禁止私接设备,桥接模式下虚拟机可能拿不到IP,这时回NAT模式,手动设置VMnet8的IP为一个不冲突的网段,比如168.88.1,然后虚拟机静态IP设为168.88.130。

处理vmware虚拟机ssh连接慢的问题

有时候不是连不上,而是连上后卡顿,输密码要等好几秒,这多半是DNS反查导致,sshd默认会尝试反向解析客户端IP,如果DNS解析不了就卡住。

在sshd_config里加一行:

VMware虚拟机SSH连接失败怎么办,连接被拒绝是什么原因?

UseDNS no

重启sshd服务,连接速度会明显提升,宿主机ssh客户端也可以加-o ConnectTimeout=5来缩短等待时间。

还有一种情况:虚拟机里开了多个网卡,比如同时启用了NAT和桥接,导致路由表混乱,你可以在虚拟机里执行ip route,看默认路由是否指向正确的网关,如果有两条默认路由,删除多余的:

route del default gw 192.168.1.1

vmware虚拟机ssh连接失败的常见问题解答

为什么虚拟机IP和宿主机能互相ping通,但ssh还是被拒绝?

ssh被拒绝分几种情况,如果是Connection refused,说明22端口没监听或者防火墙拦了,先确认sshd服务状态,再看监听地址,如果是Connection timed out,说明数据包被丢弃,检查防火墙规则是否丢弃了INPUT链,实测中,CentOS的SELinux偶尔会拦截非标准配置的sshd,你可以查看/var/log/audit/audit.log里有没有denied字段。

笔记本连接公司WiFi时,vmware虚拟机ssh连接失败怎么解决?

公司WiFi通常开启了客户端隔离,即便桥接模式,虚拟机也拿不到局域网内可互通的IP,解决办法是改用NAT模式,并确保宿主机VMnet8网卡的IP固定为168.44.1,然后虚拟机用静态IP,比如168.44.200,网关指向VMnet8,这种方式不依赖公司路由器的DHCP,只要宿主机能上网,虚拟机就能走NAT出口,宿主机ssh虚拟机时,连接168.44.200即可,如果宿主机有多个VMnet网卡,注意VMnet8是否处于启用状态,在虚拟网络编辑器里可以检查。

虚拟机重启后IP变了,ssh连接地址也跟着变,有什么固定IP的办法?

编辑虚拟机的网络配置文件,CentOS/RHEL是/etc/sysconfig/network-scripts/ifcfg-eth0,Ubuntu在/etc/netplan/目录下的yaml文件,设置静态IP时,必须把网关和DNS写对,例如NAT模式下,IP地址填168.44.200,子网掩码255.255.0,网关168.44.1,DNS可以填114.114.114,保存后重启网络服务,业内专家指出,静态IP还能避免多个虚拟机抢占同一IP导致的连错机器,固定IP后,建议在宿主机~/.ssh/config里为虚拟机配置一个别名,比如Host vm,后面接HostName 192.168.44.200,之后直接ssh vm就能登录,这样即使换了网络环境,只要NAT网段不变,连接始终稳定。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱