VirtualBox 使用 NAT 方式网络的 SSH 连接

NAT模式SSH连接VirtualBox
本文介绍如何在没有路由器的环境下,通过NAT模式设置端口转发,实现在Windows主机上使用SecureCRT通过SSH连接VirtualBox中的Ubuntu虚拟机。


在RHEL 5.6上亲测解决问题。

本文的 VirtualBox 是基于 Windows 平台环境,虚拟机中安装了 Ubuntu,即在 Windows 平台下通过 SSH 方式连接虚拟机中的 Ubuntu。

  一直以来都使用 VirtualBox 来虚拟 Ubuntu 使用,而自己的电脑都是在家里使用,家里又配置了一个无线路由器,故我总是将 VirtualBox 的网络方式设置为桥接模式(Bridged Adapter),这样可以很方便的使用 SecureCRT 的 SSH 方式连接 VirtualBox 里面虚拟的 Ubuntu。

  因为桥接模式的网络连接是相当于把虚拟出来的系统与真实主机并行存在,即假如真实主机从路由器分配得的 IP 地址为 “192.168.1.100”,那么虚拟出来的系统在桥接模式下可以将 IP 配置为 “192.168.1.101”,就可以简单的在真实主机上 ping 这台虚拟主机,或者使用 SSH 方式连接,而连接的 IP 就是 “192.168.1.101”。

  而最近放假了,准备回家过年,突然想到那里的环境是没有路由器的,于是就不可能如上的桥接模式工作了。

  VirtualBox 安装完成后默认的连接方式是 “NAT” 方式,使用此方式可以直接在虚拟系统中访问网络,当然是基于真实主机可以访问网络的情况下。而这种 “NAT” 方式就是脱离了路由器的方式,虚拟系统依赖于真实系统但是不是并行存在的模式。那么这样的方式就可以在没有网络的情况下通过真实主机系统访问虚拟系统了。

  不过这样的 “NAT” 方式是无法使用上述简单的配置 IP 的方式就能直接连接的,需要做简单的设置。

步骤一:安装 SSH 服务

  这个东西就不用多说,在这里是必须的步骤,详见之前文章

步骤二:端口转发

  此步骤就是全文的关键。关闭虚拟机,进入 Windows 平台的命令提示符模式,然后定位到你的 VirtualBox 安装目录,例如 “C:\Program Files\Oracle\VirtualBox”,接着输入:

1
VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,,22"

  其中 “VM name” 为你的虚拟 Ubuntu 的名称,即 VirtualBox 管理器中系统列表上显示的名称。即将本地真实主机的 “2222” 端口指向了虚拟机中 Linux 系统的 “22” 端口。

  “–natpf1” 不用修改,一般虚拟机默认只有一个网络连接,即第一个连接,除非你还设置有多个网络连接,这里按需修改。

  其他默认即可。

步骤三:SSH 方式连接 Ubuntu

  此时启动你的虚拟机中的 Ubuntu,启动后,打开 SecureCRT,新建一个连接,连接 IP 为 “127.0.0.1”,连接端口为 “2222”。这点非常重要,否则你将连接不上。

  剩下的就是访问帐号和密码,这个就不过多解释了。点击确定后就能连接上你虚拟机中的 Linux。



关键字:  NATSSHVirtualBox连接

### **通过 NAT 模式 SSH 连接到虚拟机(以 VirtualBox/VMware 为例)** 在 **NAT 模式** 下,虚拟机默认无法直接被外部(包括宿主机)访问,因为它的网络是隔离的。但可以通过 **端口转发(Port Forwarding)** 将宿主机的某个端口映射到虚拟机的 SSH 端口(默认 `22`),从而实现 SSH 连接。 --- ## **1. VirtualBox 端口转发配置** ### **(1) 设置端口转发规则** 1. 关闭虚拟机,进入 **虚拟机设置 → 网络NAT 模式**。 2. 点击 **端口转发**(或 **高级 → 端口转发**)。 3. 添加规则: - **名称**:`SSH`(任意) - **协议**:`TCP` - **主机端口**:`2222`(宿主机端口,可自定义) - **子系统端口**:`22`(虚拟机 SSH 端口) ![](https://www.virtualbox.org/manual/ch06.html#natforward) ### **(2) 启动虚拟机并测试** - 在宿主机终端输入: ```bash ssh -p 2222 username@localhost # 通过 2222 端口连接 ``` - `username`:虚拟机内的用户名(如 `ubuntu`)。 - `localhost` 可替换为宿主机的实际 IP(如 `192.168.1.100`)。 --- ## **2. VMware 端口转发配置** ### **(1) 设置 NAT 端口转发** 1. 关闭虚拟机,进入 **虚拟机设置 → 网络适配器 → NAT 模式**。 2. 点击 **NAT 设置** → **添加**: - **主机端口**:`2222` - **虚拟机 IP 地址**:虚拟机的内网 IP(如 `192.168.122.100`)。 - **虚拟机端口**:`22` ### **(2) 测试连接** ```bash ssh -p 2222 username@localhost ``` --- ## **3. 手动检查虚拟机 IP** 如果不知道虚拟机的内网 IP,可以在虚拟机内运行: ```bash ip a ``` 查找类似 `192.168.122.100` 的地址(VMware NAT 默认网段)或 `10.0.2.15`(VirtualBox NAT 默认网段)。 --- ## **4. 其他注意事项** ### **(1) 确保 SSH 服务已启动** 在虚拟机内运行: ```bash sudo systemctl start ssh # Ubuntu/Debian sudo systemctl start sshd # CentOS/RHEL ``` 并检查是否监听 `22` 端口: ```bash ss -tulnp | grep 22 ``` ### **(2) 防火墙放行 SSH** 如果虚拟机有防火墙(如 `ufw` 或 `firewalld`),需允许 `22` 端口: ```bash sudo ufw allow 22 # Ubuntu sudo firewall-cmd --add-port=22/tcp --permanent # CentOS sudo firewall-cmd --reload ``` ### **(3) 从局域网其他设备访问** 如果希望局域网内其他设备也能 SSH 到虚拟机: - 在宿主机端口转发规则中,将 **主机 IP** 设为 `0.0.0.0`(默认是 `127.0.0.1`,仅限本机访问)。 - 其他设备连接使用: ```bash ssh -p 2222 username@宿主机IP ``` --- ## **5. 替代方案:Host-Only + NAT** 如果 NAT 端口转发不生效,可以: 1. **添加第二个网卡** 为 **Host-Only 模式**(仅宿主机和虚拟机互通)。 2. 通过 Host-Only 网卡的 IP 直接 SSH: ```bash ssh username@192.168.56.101 # VirtualBox 默认 Host-Only 网段 ``` --- ### **总结** | 方法 | 适用场景 | 命令示例 | |---------------------|----------------------------|-----------------------------------| | **VirtualBox NAT 端口转发** | 单机测试,简单快捷 | `ssh -p 2222 user@localhost` | | **VMware NAT 端口转发** | VMware 用户 | `ssh -p 2222 user@192.168.122.100` | | **Host-Only 模式** | 需宿主机和虚拟机直接互通 | `ssh user@192.168.56.101` | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值