VirtualBox 是一种广泛使用的虚拟化工具,通常用于在隔离环境中运行 Linux 发行版进行测试或为特定任务设置服务器。
不过,有时您可能需要通过 SSH 连接到 VirtualBox 客户虚拟机,却发现它无法正常工作。别担心,这没什么大不了的。问题的关键在于 VirtualBox 的网络设置。在本指南中,我将向您展示如何快速调整这些设置,以便您能够顺利启用 SSH 访问。
我将介绍两种简单的方法:一种是使用桥接网络,另一种是使用默认 NAT 设置并添加端口转发。具体选择哪种方式取决于您的个人偏好,但无论哪种方式,您最终都会通过 SSH 访问您的虚拟机。那么,让我们开始吧。
确保 SSH 在来宾虚拟机上运行
有时,当我们专注于某个特定问题时,很容易忽略最简单的步骤——比如确保 SSH 服务器确实在 VirtualBox 虚拟机上运行。是的,我知道,你可能非常确信它已经启动了,但再检查一遍总是没错的。
最不受发行版限制的方法是使用以下命令。只需登录你的虚拟机,确认输出中包含一行“ /usr/sbin/sshd ”即可。
pgrep -a sshd
代码语言: Bash (bash )

确保 SSH 在 VirtualBox 客户虚拟机上运行。
如果您看到类似上述结果,那就太好了。这意味着 SSH 已在您的 VirtualBox 虚拟机上启动并运行。当然,您也可以运行systemctl status ssh
或systemctl status sshd
(具体服务名称取决于您的发行版)来检查相同的操作。
但是,如果上述命令没有显示 SSH 正在运行(没有返回任何内容),则需要先安装并启动它。该设置不在本指南的讨论范围内,因此请查看发行版的文档以获取详细步骤。
默认情况下,SSH 监听 22 端口,除非你更改了该设置,否则它应该仍然会使用该端口。为了确认这一点,你可以运行以下命令:
sudo netstat -tulnp | grep sshd
代码语言: Bash (bash )

检查 SSH 正在监听哪个端口。
现在,一切就绪,是时候进入本指南的主要部分了。
SSH 连接到 VirtualBox VM:桥接适配器
在我们讨论具体的变化之前,我想先谈一下理论——这样我们就能清楚地知道我们实际上在做什么,更重要的是,我们为什么要这样做。
默认情况下,VirtualBox 会使用 NAT 网络设置新的虚拟机。在此模式下,虚拟机位于 VirtualBox 创建的一种内部路由器后面。客户机可以访问外部世界,但外部世界(包括您的主机系统)无法直接向虚拟机发起连接。
这就是为什么尝试从主机(或其他系统)通过 SSH 连接到客户机失败的原因:NAT 引擎不会自动将主机的 22 号端口(或任何端口)转发到客户机。为了解决这个问题,您需要将 VirtualBox 客户机虚拟机切换到桥接网络模式。
这样一来,虚拟机就不再隐藏在 VirtualBox 的 NAT 后面了。相反,它会直接连接到与主机相同的物理网络或 Wi-Fi 网络,就像该 LAN 上的另一台机器一样。
这意味着它会从网络的 DHCP 服务器(或您手动分配的服务器)获取自己的 IP 地址,然后主机(或网络上的任何其他计算机)就可以通过 SSH 连接到它,就像连接到任何其他计算机一样。那么,让我们开始吧。这是一个简单的任务。
首先确保虚拟机已关闭。然后,右键单击虚拟机,并从上下文菜单中选择“设置”。如果您愿意,也可以选择虚拟机,然后点击主菜单下的“设置”按钮。

打开 VirtualBox 的 VM 设置
现在,转到左侧主菜单,然后点击“网络”。选择虚拟机的活动默认网络适配器(通常为“适配器 1 ”)。然后,打开“连接到”下拉菜单,将设置从“ NAT ”更改为“桥接适配器”。

将 VirtualBox VM 的网络适配器切换到桥接模式。
最后,单击右下角的“确定”按钮保存更改。

启动虚拟机。要连接,您需要它的 IP 地址。最简单的方法是本地登录并运行以下命令。
ip a
代码语言: Bash (bash )


查找虚拟机的 IP 地址。
您可以开始了 – 在本地网络中的任何主机上打开一个终端并运行标准 SSH 命令来访问您的 VirtualBox Linux VM。
ssh <user>@<host-lan-ip>
代码语言: Bash (bash )


已成功通过 SSH 连接到 VirtualBox Linux VM。
SSH 连接到 VirtualBox VM:带端口转发的 NAT
现在让我们看看通过 SSH 连接到 VirtualBox Linux 虚拟机的另一种方法——这次使用默认的 NAT 网络模式,并启用端口转发。我在说什么?
VirtualBox 允许您将主机上的端口转发到客户虚拟机内的端口。对于 SSH,常见的设置是将主机端口 2222(或其他未使用的端口)转发到客户虚拟机的 22 端口。设置此规则后,任何与主机 2222 端口建立的连接都会自动通过 VirtualBox 的 NAT 引擎,并传递到客户虚拟机的 SSH 服务。操作方法如下。
按照上一节的说明打开虚拟机设置。在左侧面板上,点击“网络”,并确保你查看的是虚拟机正在使用的活动网络适配器(应勾选“启用网络适配器”复选框)。在“连接到”下拉列表中,选择“ NAT ”。现在到了有趣的部分——点击“端口转发”按钮。


为 NAT + 端口转发设置 VirtualBox VM 的网络适配器。
将会弹出一个新窗口,您可以在其中设置端口转发规则。以下是每个选项的含义:
- 名称:这只是一个标签。您可以输入任何您喜欢的名称。最直接的选择当然是“ SSH ”。
- 协议:将此设置保留为默认值“ TCP ”。
- 主机 IP:使用 0.0.0.0。这意味着“监听主机的所有网络接口”。换句话说,从任何位置(环回网络、LAN,甚至 WAN,如果是公开的)到主机的连接都将被接受。
- 主机端口:这是主机上将要打开的端口。如果您连接到主机的 2222 端口,流量将被转发到虚拟机中。
- 客户机 IP:这是客户机虚拟机的内部 NAT 分配的 IP 地址。输入虚拟机的 IP 地址,就像我们在上一节中找到的那样。
- 来宾端口:这是 SSH 服务器在虚拟机内部监听的端口。默认情况下,该端口为 22。
准备好后,请点击“ OK ”按钮确认。


为 Linux 客户虚拟机设置端口转发规则。
最后,不要忘记再次单击右下角的“确定”按钮来保存迄今为止所做的所有更改。



启动虚拟机。从本地网络上的任何其他计算机(甚至从 VirtualBox 主机本身)运行以下命令。请注意,这次我们添加了一个-p
选项,该选项指示 SSH 通过主机上的端口 2222 进行连接。这是我们之前配置端口转发时设置的端口。
ssh -p 2222 <user>@<host-lan-ip>
代码语言: Bash (bash )


就这样,我们成功地通过 SSH 连接到了 VirtualBox Linux 客户端。如果您有多个 Linux 虚拟机,并且想对它们执行同样的操作,只需设置另一个端口转发规则,使用不同的空闲端口(例如 2223)。然后,连接时,请确保-p
在 SSH 命令的选项中使用该端口号。
结论
如您所见,一旦您了解了网络工作原理,获取 VirtualBox 客户端的 SSH 访问权限并不复杂。无论您是使用桥接网络实现更直接的连接,还是坚持使用 NAT 并添加端口转发,这两种方法都可以完成任务。选择主要取决于您喜欢如何管理虚拟机的连接。