Xshell连接不上虚拟机IP 检查网络模式
Xshell6是一个强大的安全终端模拟软件。 Xshell6支持SSH1,SSH2和TELNET 协议。用户可以通过家里的网络连接远程主机,方便用户在家处理突发事情,可以让用户轻松管理远程主机。 Xshell6还可以上传下载文件,非常方便。
解决Xshell连接VirtualBox虚拟机失败问题。教程涵盖检查NAT网络模式、确认Ubuntu SSH监听、使用VBoxManage配置端口转发及Xshell会话设置,确保宿主机与虚拟机SSH通信正常。
Xshell连不上虚拟机时,最常见的原因是网络模式与连接地址不匹配。与其盲目切换网卡设置,不如先理清当前的网络拓扑。本教程以Windows宿主机上的VirtualBox 7.2.2和Ubuntu虚拟机为例,演示如何将默认的普通NAT模式配置为可从本机Xshell访问的SSH入口,让连接参数与实际网络路径严格对应。
准备一台能从VirtualBox控制台登录的Ubuntu虚拟机,并确认已安装OpenSSH服务端。本例沿用“Ubuntu-Lab”这台虚拟机,使用第1块网卡的普通NAT模式和自动获取地址,目标是通过端口转发实现宿主机对虚拟机SSH端口22的访问。

VirtualBox网络设置中确认第1块网卡为NAT模式
1. 选中虚拟机,确认实际使用的网络模式
在VirtualBox管理器中选中“Ubuntu-Lab”,点击【设置(Settings)】进入【网络(Network)】面板。查看第1块网卡是否已启用,并记录【连接方式(Attached To)】的具体选项。此时应确认它是“NAT”、“NAT网络”、“桥接网卡”还是“仅主机网络”,同时检查虚拟网线是否处于连接状态。
这一步的核心是记录现状,避免在排查过程中随意切换模式。因为切换网卡或模式后,虚拟机通常会获取新的IP地址,导致原有的Xshell连接参数失效。
不同网络模式下,Windows宿主机访问虚拟机的路径截然不同:
- 普通NAT:需配置端口转发,连接宿主机的转发入口。
- 桥接网卡:需检查桥接的物理网卡、虚拟机实际IP及局域网可达性。
- 仅主机网络:需检查宿主机虚拟网卡与虚拟机是否在同一可通信网段。
- 内部网络:默认不提供宿主机应用直接访问虚拟机的通道。
本例确认为普通NAT后继续后续步骤。若当前已是桥接或仅主机模式,应直接排查对应网卡的IP连通性,无需添加NAT端口转发规则。

1. 选中虚拟机,确认实际使用的网络模式
2. 在虚拟机控制台核对地址和SSH监听
启动“Ubuntu-Lab”并打开其控制台窗口。在Ubuntu终端中输入以下命令查看IPv4地址:
ip -4 address show
找到实际启用的虚拟网卡(如enp0s3),记录其inet后的IP地址。注意区分回环地址127.0.0.1、容器网桥地址或旧截图中的IP,务必以当前输出为准。
接着查看正在监听的TCP端口:
ss -lnt
检查列表中是否存在端口22。若SSH服务仅绑定在127.0.0.1而未监听虚拟网卡地址,来自外部网络的连接将被拒绝。若SSH使用了非标准端口,后续的转发目标端口也需同步修改。

Ubuntu终端中查看IP地址和SSH监听端口
这两条命令仅用于查看状态。若未发现22端口监听,应先解决SSH服务的安装、配置或启动问题;若已监听,还需确认防火墙是否放行,才能进行下一步的连接测试。
3. 为普通NAT添加本机SSH转发入口
保持第1块网卡的普通NAT和自动获取地址设置不变。为确保配置生效,建议在Ubuntu中正常关机,等待VirtualBox显示虚拟机已关闭后再操作。
本例将Windows本机的127.0.0.1:2222端口转发至虚拟机的22端口。在Windows PowerShell中执行以下VBoxManage命令(假设VirtualBox安装在默认目录):
& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' modifyvm 'Ubuntu-Lab' --natpf1 'xshell-ssh,tcp,127.0.0.1,2222,,22'
命令解析:
xshell-ssh:规则名称,便于识别。tcp:协议类型。127.0.0.1,2222:宿主机监听地址与端口。,22:虚拟机SSH端口(中间留空表示由NAT DHCP自动分配客户机IP)。
此规则仅绑定本机回环地址,供同一台Windows上的Xshell访问。若提示规则重名、端口冲突或虚拟机状态错误,需先清理现有规则或检查虚拟机状态。注意,该命令针对普通NAT网卡,不适用于全局“NAT网络”服务。
4. 启动虚拟机,从Windows测试同一个端口
重新启动“Ubuntu-Lab”,等待系统完全启动且SSH服务就绪。在Windows PowerShell中运行以下命令测试转发入口:
Test-NetConnection -ComputerName 127.0.0.1 -Port 2222
观察返回结果中的TcpTestSucceeded字段。若为True,说明TCP端点连通,但尚不能证明SSH认证成功;若为False,则说明连接未打通,需检查虚拟机运行状态、转发规则绑定、端口占用情况及防火墙设置。
注意,不要仅凭ping通虚拟机IP就判断SSH可用,因为ping使用的是ICMP协议,而SSH依赖TCP端口。本例测试的是127.0.0.1的2222端口,而非宿主机的22端口或虚拟机的内部IP。

使用Test-NetConnection验证端口连通性
5. 在Xshell保存对应参数,验证SSH登录
打开Xshell,点击【文件(File)→新建(New)】。将会话命名为“Ubuntu-Lab-NAT-SSH”,协议选择SSH,主机填写127.0.0.1,端口填写2222。确认后点击连接。
务必确保主机与端口成对使用:不要在主机栏填写“127.0.0.1:2222”,也不要误填客户机的22端口。登录用户名需使用Ubuntu系统中的实际账户。
首次连接时会出现主机密钥指纹提示,核对无误后接受并输入密码或密钥认证。若进入认证阶段却提示失败,应检查账户权限或SSH配置,而非归结为网络问题。

Xshell中新建SSH会话并填写转发地址
成功登录后,确认终端提示符属于目标Ubuntu系统,并执行简单的只读命令(如hostname)核对身份。只有确实进入目标虚拟机,才算完成连接修复。建议保留此会话配置,并在本地记录“普通NAT、第1块网卡、127.0.0.1:2222转到客户机22”的对应关系,以便后续维护。

































