VMware 虚拟机Ubuntu 环境linux远程连接失败

问题大概率出在网络连通性或 SSH 服务本身。我们按从外到内的顺序,一步步缩小范围。

🔍 第一步:先看懂报错,确认是哪一层的问题

SSH 连接失败主要分三种情况,报错信息会直接告诉你方向:

报错关键词 含义 重点排查方向
Connection timed out 网络包根本没到达目标主机(或被防火墙丢弃) 虚拟机网络模式、IP 地址、防火墙
Connection refused 包到了,但目标端口没有服务在监听 SSH 服务(sshd)是否启动
Permission denied 网络通了,但认证失败 用户名、密码或密钥问题

先确认你看到的是哪一种报错,这决定了下一步往哪查。

🛠️ 第二步:根据报错,针对性排查

情况一:如果是 "Connection timed out"

这通常意味着网络路径不通 。考虑到 VMware 环境,先从虚拟机的网络入手。

  • 检查虚拟机 IP :在 Ubuntu 里执行 ip addr show,确认 ens33 是否有一个正常的 192.168.x.x 地址。如果是 169.254.x.x,说明 DHCP 失败,需要回到修复网络配置的步骤。
  • 检查连通性 :在 Windows 宿主机上 ping 你的Ubuntu_IP。如果不通,说明虚拟机网络没配置好(比如 NAT 模式下的端口转发没设置,或者桥接模式网段不对)。
  • 检查宿主机虚拟网卡 :在 Windows 的"网络连接"里,查看 VMnet8 (NAT 模式)或 VMnet1 (仅主机模式)的 IPv4 地址,确保它和 Ubuntu 的 IP 在同一网段 。如果 VMnet8 也是 169.254.x.x,问题就在宿主机这边。

情况二:如果是 "Connection refused"

这通常意味着网络是通的,但 SSH 服务没在工作。

  • 检查 SSH 服务状态 :在 Ubuntu 里执行 systemctl status ssh。
  • 启动并设置自启 :如果服务是 inactive 或 not found,执行 sudo systemctl enable --now ssh。
  • 检查端口监听 :执行 ss -tlnp | grep :22,确认能看到 0.0.0.0:22 或 :::22 的监听状态。

情况三:如果是 "Permission denied"

这说明网络和服务都正常,问题出在身份验证。

  • 确认用户名 :Ubuntu 默认不允许 root 用户直接通过 SSH 登录 。如果你是用 root 连接,需要修改 /etc/ssh/sshd_config,找到 PermitRootLogin 并改为 yes,然后重启 SSH 服务。
  • 确认密码/密钥 :检查密码是否正确,或者密钥文件权限是否设置得当(通常是 chmod 600)。

我的实际情况(Connection refused)

排查与解决过程

1. 检查 SSH 服务是否存在

首先在 Ubuntu 虚拟机上确认 SSH 服务端是否已安装:

bash

bash 复制代码
sudo systemctl enable --now ssh

结果报错:

text

复制代码
ssh 不存在

结论:Ubuntu 默认没有安装 SSH 服务端,需要手动安装。

2. 安装 SSH 服务端

bash

sql 复制代码
sudo apt update
sudo apt install openssh-server

执行 apt update 时提示「有 222 个软件包可以升级」,这是正常提示,说明软件源索引更新成功,不影响安装 SSH。

安装过程中如果遇到「无法获得锁」的错误,通常是系统后台的自动更新服务(unattended-upgrades)正在占用软件包管理器的锁。这是 Ubuntu 的安全机制,同一时间只允许一个进程修改软件包数据库。最简单的处理方式是等待几分钟,等自动更新结束后再重试安装。

3. 启动 SSH 服务

安装完成后,检查服务状态:

bash

lua 复制代码
sudo systemctl status ssh

输出显示:

text

makefile 复制代码
Active: inactive (dead)

说明 SSH 已安装,但当前没有运行。手动启动:

bash

sql 复制代码
sudo systemctl start ssh

再次检查状态:

bash

lua 复制代码
sudo systemctl status ssh

输出:

text

yaml 复制代码
Active: active (running) since Sun 2026-10-04 15:35:07 CST
Loaded: loaded (...; disabled; preset: enabled)

结论 :SSH 服务已成功启动,但 disabled 表示开机不会自动启动。

4. 设置开机自启

为了避免每次重启虚拟机后都要手动启动 SSH,设置开机自启:

bash

bash 复制代码
sudo systemctl enable ssh

执行后 status 里的 disabled 会变成 enabled。

5. 确认虚拟机 IP 地址

bash

sql 复制代码
ip addr show ens33

找到 inet 后面的地址,例如 192.168.x.x。这个 IP 用于从宿主机连接。

6. 从 Windows 宿主机测试连接

在 Windows 的 CMD 或 PowerShell 中执行:

bash

swift 复制代码
ssh 用户名@虚拟机IP

例如:

bash

css 复制代码
ssh lxy@192.168.10.128

第一次连接会提示确认主机指纹,输入 yes,然后输入该用户的密码,即可登录。

关键命令速查

| 操作 | 命令 |
|------------|-----------------------------------|------------|
| 安装 SSH 服务端 | sudo apt install openssh-server |
| 启动 SSH | sudo systemctl start ssh |
| 设置开机自启 | sudo systemctl enable ssh |
| 查看服务状态 | sudo systemctl status ssh |
| 查看虚拟机 IP | ip addr show ens33 |
| 查看 22 端口监听 | `ss -tlnp | grep :22` |
| 检查防火墙 | sudo ufw status |
| 放行 SSH | sudo ufw allow ssh |
| 宿主机连接 | ssh 用户名@虚拟机IP |


经验总结

1. Ubuntu 默认没有 SSH 服务端

Ubuntu 桌面版和服务器版默认都不安装 openssh-server,需要手动装。装完后服务默认是 inactive 的,要手动 start 并 enable。

2. 服务名是 ssh,不是 sshd

sshd 是后台进程的名字,但 systemctl 管理的单元名是 ssh。用错名字会提示「服务不存在」。

3. 「无法获得锁」不用慌

apt 报「无法获得锁」通常是后台自动更新在跑,等几分钟再试即可。强行删锁文件有风险,不推荐作为首选。

4. 先分清故障层级再动手

Connection timed out 是网络问题,Connection refused 是服务问题,Permission denied 是认证问题。先看报错关键词,再决定往哪个方向查,比盲目试错高效得多。

5. 系统更新前先拍快照

虚拟机的一大优势就是可以拍快照。升级内核、大规模更新软件包之前拍一个,出问题能快速回滚。

6. 内核更新后必须重启

System restart required 提示出现时,说明有更新(通常是内核)需要重启才生效。重启前确认快照已拍,重启后在 GRUB 菜单里可以选旧内核作为备用。


结语

这次远程连接配置的核心问题其实很简单:Ubuntu 默认没装 SSH 服务端。装上、启动、设为自启,三步就能解决。

排查问题时,先看清报错属于哪个层级,再针对性处理,比一个个试命令要高效得多。

相关推荐
lisanmengmeng1 小时前
Nagios邮件报警的配置
linux·运维·服务器
Ruiery1 小时前
Linux 6.6内核 CPU 深度解析(六):cpufreq
linux·运维·服务器
倔强的石头1061 小时前
【Linux指南】动静态库系列(十一):PLT 与延迟绑定:第一次调用动态库函数时发生了什么
linux·人工智能·python
硅基手札2 小时前
【linux内核专栏 08】时间与定时器
linux·运维·服务器
想做小南娘,发现自己是女生喵3 小时前
Linux之Ubuntu入门篇知识总结
linux·运维·服务器
CHEEVEN_QY3 小时前
搅拌摩擦焊FSW工艺参数对焊缝成形影响的实验研究10.1
linux·服务器·数据库
H.莓飛4 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
木白CPP4 小时前
USB(一): USB 概述&&介绍
linux·网络·嵌入式硬件
熬夜敲代码的猫4 小时前
Linux:进程概念
linux