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连接失败怎么解决?一步一步来
上面是排查思路,下面是具体操作路径,建议按顺序执行,每一步都有输出,能快速定位问题。
第一步:从虚拟机内部测试本机回环
先在虚拟机里执行:
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连接。
第四步:虚拟网络编辑器还原默认设置

如果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里加一行:
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网段不变,连接始终稳定。
