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

虚拟机配置SSH连接失败怎么办,无法远程登录排查步骤,详细解决方法

导读虚拟机SSH连接失败,绝大多数情况下不是系统坏了,而是网络模式选错、IP地址没对上或SSH服务压根没启动,先从这三个方向排查,按本文步骤走,十分钟内基本能定位问题,虚拟机SSH连接失败第一步:先确认网络连通性SSH连不上,第一反应别急着改配置,先弄清楚一个核心问题:你的宿主机能不能“看到”虚拟机,多数情况下,这……

虚拟机SSH连接失败,绝大多数情况下不是系统坏了,而是网络模式选错、IP地址没对上或SSH服务压根没启动,先从这三个方向排查,按本文步骤走,十分钟内基本能定位问题。

虚拟机SSH连接失败第一步:先确认网络连通性

SSH连不上,第一反应别急着改配置,先弄清楚一个核心问题:你的宿主机能不能“看到”虚拟机,多数情况下,这一步能筛掉一大半故障。

检查虚拟机IP地址是否正常获取

在虚拟机终端里执行:

ip addr show
  • 如果看到eth0或ens33接口下有inet 192.168.x.x这类地址,说明IP正常
  • 如果只有0.0.1(loopback地址),说明网卡没拿到IP,需要检查虚拟机的网卡连接状态
  • 执行ping 192.168.1.1(网关地址),不通的话就是网络模式或网卡配置有问题

很多人在VMware里装完CentOS或Ubuntu后,虚拟机一直显示“有线网络未连接”,这通常是因为虚拟机网络适配器没勾选“已连接”选项,打开虚拟机设置,找到网卡适配器,确保两个勾选框都打上。

宿主机与虚拟机互相ping通测试

ip addr查到的IP,先在宿主机上ping一下:

ping 192.168.x.x
  • 能通:说明网络栈没问题,问题在SSH服务或防火墙
  • 不通:说明物理链路不通,虚拟机连不上宿主机,排查重点放到网络适配器模式和VMware网络设置上

有个小技巧:如果虚拟机内可以ping 8.8.8.8(外网通)但宿主机ping不通虚拟机,十有八九是NAT模式下的网络段冲突或Windows防火墙拦截了宿主机入站请求。

排查SSH服务是否在虚拟机内部正常运行

网络通了还连不上,就要看虚拟机内部的SSH服务状态了,业内专家指出,超过一半的SSH连接失败案例,问题都出在sshd服务没启动或没装好。

检查sshd服务运行状态

在虚拟机里执行:

systemctl status sshd
  • 显示Active: active (running),服务正常
  • 显示inactive或failed,需要启动:systemctl start sshd
  • 提示Unit sshd.service could not be found,说明压根没安装,执行安装命令:
# CentOS/RHEL系
yum install -y openssh-server
# Ubuntu/Debian系
apt install -y openssh-server

安装完后再启动并设置开机自启:

systemctl enable --now sshd

SSH配置文件里改了端口更要小心

如果你之前改过

虚拟机配置SSH连接失败怎么办,无法远程登录排查步骤,详细解决方法

/etc/ssh/sshd_config里的Port字段,连接时就别再用默认22端口了,很多朋友改了端口后忘记防火墙放行新端口,一样连不上,检查SSH配置是否有效:

sshd -t

这条命令能验证配置文件语法,报错信息会直接告诉你哪一行有问题,常见问题是PermitRootLogin no(禁止root登录)和PasswordAuthentication no(禁止密码登录),这两个设置项在任何云服务器或虚拟机上都会坑到一批人。

改完配置必须重启服务才能生效:

systemctl restart sshd

防火墙与安全组拦截SSH端口的处理办法

网络通、服务也在跑,依然连不上,那就是流量在防火墙层面被拒了,虚拟机防火墙、宿主机防火墙、甚至VMware自身的端口映射,都可能成为拦路虎。

检查虚拟机内部防火墙规则

Linux虚拟机内执行:

# CentOS7+ 使用firewalld
firewall-cmd --list-all
# Ubuntu使用ufw
ufw status

看输出里有没有放行22端口(或自定义的SSH端口),没有就添加:

# firewalld
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload
# ufw
ufw allow 22/tcp

有时候防火墙规则看着没问题,但SELinux会在底层拦截,遇到CentOS机器SSH老是断断续续,建议先临时关闭SELinux测试一番:

setenforce 0

能连了就是SELinux策略问题,改回正途是调整策略,而非粗暴关闭,但在小型内部测试环境,关闭SELinux是多数人的选择。

Windows宿主机防火墙拦截虚拟机网段

宿主机装了防火墙软件(比如360、电脑管家)或者Windows Defender拦截了VMware虚拟网卡网段,也会导致SSH连接超时,临时关闭宿主机防火墙试一下,能通就说明是宿主机拦的,在防火墙“允许应用”里把VMware相关进程和SSH客户端的专用/公用网络访问权限打开即可。

少见但真实存在的场景:如果你用的是VMware的NAT模式,并且试图通过宿主机访问虚拟机内部专门监听在192.168网段上的服务,Windows的“虚拟网络编辑器”如果勾选了“连接主机虚拟适配器到网络”,可能在某个Windows版本下出现路由冲突,进入网络和共享中心 → 更改适配器设置,检查VMware Network Adapter VMnet8是否启用了默认网关,在多数Windows 10/11版本上,把VMnet8的IP设置为“自动获取”或手动指定为静态IP即可避免此坑。

VMware网络模式选择不对导致ssh连不上

虚拟机的网络模式直接影响SSH连通性,很多人问虚拟机ssh连接失败和网络模式有什么关系,这俩关系可太大了,不同模式对应的IP规则完全不同,搞清楚这点能少走大量弯路。

虚拟机配置SSH连接失败怎么办,无法远程登录排查步骤,详细解决方法

NAT模式与桥接模式的区别与选择

网络模式 IP段特征 宿主机能否直接访问虚拟机 虚拟机能否上外网
NAT 通常是192.168.xxx.0网段 可以,但需要端口转发或同一虚拟网卡网段 可以,通过宿主机共享网络
桥接 与宿主机同一网段 可以,当作局域网内的独立设备 可以,依赖路由器DHCP
Host-Only 独立VMnet网段 可以,仅限宿主机和虚拟机内部互通 不可以,默认不走物理网络

NAT模式下ssh连接失败的常见原因与解决

NAT模式下,VMware为虚拟机分配一个私有网段(默认192.168.44.0或者你自定义的网段),虚拟机的网关指向宿主机虚拟网卡的IP(通常是192.168.44.1),此时SSH连接失败,多数情况下是因为:

  1. 宿主机还有别的VMware NAT网段残留,导致路由混乱
  2. 其他软件(如VirtualBox)安装后创建的虚拟网卡抢占了网段
  3. Windows的虚拟网卡适配器被禁用

解决思路:在VMware菜单栏选择编辑 → 虚拟网络编辑器,点击右下角的还原默认设置,让VMware重新分配NAT网段,这一步能解决不少诡异的NAT模式连不上问题。

NAT模式下如果你从宿主机SSH连接不上去,还可能是端口转发没做,在虚拟网络编辑器里,找到NAT设置,把宿主机的某个端口(比如2222)转发到虚拟机的22端口,之后用:

ssh root@localhost -p 2222

就能连上,这条路径也很适合那些“宿主机能上网但就是连不上虚拟机”的疑难杂症。

桥接模式IP冲突导致连不上

桥接模式下,你的虚拟机相当于局域网里的另一台设备,如果DHCP分配IP和局域网其他设备冲突,SSH自然连接失败,排查手法:在虚拟机里ping宿主机IP,同时检查虚拟机的IP是否和路由器后台显示的一致,冲突后在虚拟机内dhclient重新获取IP,或者为虚拟机配置静态IP,配置静态IP要留意掩码和网关必须和宿主机一致,不能只抄一个IP就完事。

SSH连接时提示"Connection refused"或"Operation timed out"分别怎么处理

这两种报错背后的原因完全不同,能否区分它们,决定了排查效率。

Connection refused:服务未监听或防火墙拒绝

这句报错说明网络是通的,但目标端口上的服务没在听,按顺序检查:

# 查看22端口是否有监听
netstat -tlnp | grep 22

虚拟机配置SSH连接失败怎么办,无法远程登录排查步骤,详细解决方法

没有任何输出,说明sshd进程没起来,或者监听地址不是0.0.0.0,注意看sshd_config里的ListenAddress,如果写了ListenAddress 127.0.0.1,SSH服务只监听本地回环地址,外部连接自然被拒。

多数情况下,Connection refused也出现在防火墙把端口DROP掉但没拒绝ICMP的情况下,检查防火墙规则里的端口放行状态即可。

Operation timed out:数据包被丢弃或路由不对

超时说明数据包发出去后没有任何响应返回,既不是拒绝也不是接受,常见于:

  • 跨网段通信但路由不正确(宿主机根本不知道虚拟机的网段在哪)
  • 虚拟机防火墙配置里DROP了IN_GUEST网段的请求
  • VMware DHCP租约过期,IP实际已经换了

处理技巧:在宿主机上arp -a查看是否存在虚拟机IP对应的MAC地址,没有记录说明虚拟机根本没在响应ARP请求,网络层就有问题。

常见SSH连接失败原因检查清单

把以上逻辑整理成清单,按顺序核查,能解决绝大部分问题:

  • 虚拟机网卡是否处于已连接状态(VMware右下角网卡图标点开)
  • 虚拟机内部IP是否为正常地址(不是169.254.x.x那种自动失败地址)
  • 宿主机ping虚拟机IP是否通
  • 虚拟机内systemctl status sshd是否active
  • 虚拟机的防火墙(firewalld/ufw)是否放行了SSH端口
  • 宿主机Windows防火墙是否拦截了VMware网段
  • VMware虚拟网络编辑器里NAT网段是否有冲突
  • sshd_config里改过的参数是否生效并重启
  • SELinux或AppArmor是否干扰了sshd进程

Q&A:虚拟机ssh连接失败常见疑问

虚拟机换了网络环境后ssh连不上了怎么办?

虚拟机从家里NAT模式切换到公司桥接模式后,IP地址大概率变了,先查虚拟机新IP再连接,如果虚拟机配置了静态IP而新的Wi-Fi网段不一样,需要在虚拟机内部重新配置IP或改成DHCP自动获取。

虚拟机ssh连接失败且有VNC可以进系统,怎么快速定位?

能进图形界面或VNC就好办很多,先执行systemctl status sshd确认服务状态,再执行ss -lnt查看监听端口,最后临时在宿主机上telnet虚拟机的22端口判断网络层通不通,三个命令的结果基本能定位到具体环节。

用Xshell和FinalShell连不上VMware虚拟机有什么差异?

Xshell、FinalShell以及其他SSH客户端本质上走的是同一个协议,连接失败的根因都在前面提到的服务端、网络或防火墙,没有哪个客户端连虚拟机有特殊优势,如果你的Xshell连不上而MobaXterm能连上,多半是你Xshell会话里保存的IP或端口和虚拟机的实际状态不一致换客户端前先核对这个,能省下不少排查时间。

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