我该如何设置以便可以通过 SSH 进入我的 VMWare 客户 VM?

我该如何设置以便可以通过 SSH 进入我的 VMWare 客户 VM?

由于某种原因,互联网上关于此过程的文档非常缺乏或过时。基本上,我在 VMWare Fusion 中有一个来宾 VMWare 虚拟机(运行 Ubuntu 10.10),并且我有 Mac OSX 10.6 作为主机。我希望能够从 Mac 通过 SSH 连接到 Linux VM。我该如何配置才能实现这一点?

答案1

绝对如此 - 这只是使用本地或桥接接口的问题,并计算出运行 ssh 服务器的系统的 ip 地址(使用 ifconfig 命令)。在 VM 上安装 openssh-server,使用您的 ssh 客户端,就完成了。

如果您使用NAT接口,则可能会更复杂,一般不建议这样做。

答案2

实际上,有很多很好的理由在虚拟机中使用 NAT,而不是桥接接口。(这是一个老问题,但它是我在搜索如何执行此操作时出现的第一个结果,从我一直这样做的 VirtualBox 迁移而来,所以我认为值得添加)

使用 NAT 的几个原因如下:

  • 简单又便携
  • 如果你在客户局域网中,需要已知的 MAC 地址才能获取 IP(否则你将不得不尝试猜测未使用的 MAC 地址,这有可能发生冲突,并且通常会引起人们的不良注意 :) ),
  • 比如允许您的虚拟机使用主机上的单个代理服务器(例如,如果您不控制您所在的网络),或者能够在一个方便的地方对传出的广播(窗口等)流量进行防火墙/过滤。
  • 能够为它们分配一个固定或保留的 IP,以便您可以从主机外部通过名称/IP 引用它们(同样,如果您无法通过桥接接口在网络上获得保留)
  • 但最重要的是,它允许您隐藏在主机上的单个防火墙配置后面,并以更受保护的方式在您/他们之间共享内容,而不是将每个虚拟机暴露在“野外”并必须单独保护它们等等。就像您使用互联网调制解调器/路由器一样

无论如何,对于我的情况(VMWare Workstation 10、Linux 主机、OS X Guest)以及任何偶然发现这一点的人来说,这是对我有用的概述。除了犹豫不决和假设之外,实际上只有 3 个主要步骤。

  • 因此,首先您需要决定要从主机“外部”允许虚拟机/客户机访问哪些内容(请注意,如下所示,您将能够从主机本身轻松访问它)。安全的做法是只向子网上的机器公开/允许 SSH(端口 22)。如果您在虚拟机上有 Web 服务器等,您还可以允许端口 80/443,并且您还可以使用“隧道”通过 SSH 访问其他服务(下面将给出示例),并使用 FUSE/SSHFS 授予主机文件系统访问权限。(或者 VMWare 上的共享文件夹功能,但我还没有使用它)。

因此,这个想法是这样的:“允许主机本地网络上的东西(例如 10.1.1.0/24 或 192.168.1.0/24)连接到主机上的端口 22222,我们将转发到特定来宾的端口 22”。当然,它必须是特定的来宾(这使得能够配置您的 IP 更加有用,并且您可以在一个地方更改它们而无需打开每个虚拟机),就像通过您的互联网路由器允许游戏通过等一样。

  • 接下来,决定你需要哪些服务

    • 允许主机通过 iptables/firewall 连接到“外部”端口。端口 22 可能已被主机上的 sshd 使用,因此您可以使用 22222 之类的值。在这种情况下,将类似以下内容添加到 /etc/ufw/before.rules(并重新启动 ufw)

      # 你的本地网络/子网掩码可能是这样的10.1.1.0/24...

      -A ufw-before-input -p tcp --dport 22222 -m state --state NEW -s my_subnet_and_mask -j 接受 `

    • 在主 VMware DHCP 配置中为您的虚拟机提供一个保留 IP(可选,但如果您想从主机“针孔”到它,则更容易依赖),在 /etc/vmware/vmnet8/dhcpd/dhcpd.conf 的底部添加类似这样的内容

      # Just like a normal dhcpd reservation
      host my_vm_1 {
           hardware ethernet *your_vm_eth_mac_here**;
           # This is in default range for guests, but outside the 'pool'.
           # - check that it matches your vmware config
           fixed-address 192.168.198.10; 
           # And/or your own internal nameserver etc
           option domain-name-servers 8.8.8.8;
           option domain-name "some_domain_suffix";
           # This is the default default-route of the VM
           option routers 192.168.198.2; 
      }
      
    • 通过将其添加到 /etc/vmware/vmnet8/nat/nat.conf 的 [incomingtcp] 部分,告诉 VMWare 将连接从 22222 转发到 guest:22,然后重新启动 vmware 服务(参见下面的注释)

      [传入 TCP]

      22222 = 192.168.198.10:22

    • 您可能还需要允许端口 22 连接您的客户机,具体取决于它是什么/它是否有自己的防火墙。在这个 OS X 客户机案例中,它通过共享设置启用“远程登录”,在 Linux 上,它可能通过 ufw 启用,如上面的主机一样,等等

因此,一旦完成所有操作,您就可以使用笔记本电脑或 LAN 上的其他机器,通过 22222 上的 ssh 连接到您的工作站(vmware 主机),然后您将被转移到您告诉它转发给您的客户端。如上所述,如果您还想连接到客户端上的 postgres 服务器(或通常未加密的 vnc 服务器),您可以在相同的命令中建立隧道(而不是将其也添加到 dhcp conf)。例如

console ~> ssh root@hostip -p 22222 -L 54320:localhost:5432

然后,您将通过 vmware 中的 ip 转发 ssh 进入客户机,并可以将 pgadmin3 工具指向笔记本电脑上的 localhost:54320(非特权),并且网络上的流量将被加密。(请注意,那里的“localhost”已转发给客户机)

笔记

  • 有各种各样的方法可以做到这一点。首先,您可以直接隧道连接到主机并在 -L 中指定来宾的 IP,它会“突破”并指向那里,但 nat.conf 选项很好用且方便,您不必每次都输入它。还有其他端口转发方式
  • 我曾在几个帖子中看到过关于使用虚拟网络 GUI 来实现这一点(比如 virtualbox 就有),但我在这个版本中找不到它
  • 我不用 Windows,所以尽管我假设配置为主机非常相似,但我不确定。NAT 配置应该适用于任何 vmware 客户端(尽管我没有使用任何其他版本的 VMWare)
  • VMware 设置了一条路由,以便主机可以直接联系 NAT 客户机,即从主机的控制台,我可以直接 ping/ssh 等 NAT 客户机 192.168.198.10(上面定义)

    console ~> route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    <snip>
    192.168.198.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
    192.168.233.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
    
  • 从 Linux 说明来看,需要对 vmware 和 systemd init 进行一些调整,才能使其自动顺利启动,同时我发现我无法重新启动 vmware(vmci 不会再次加载),我必须重新启动我的机器才能使上面的 NAT/DHCP 内容生效,但您可能不会遇到此问题。不过,有一些线程提供了 systemd 解决方案

答案3

为了简化事情:

  1. 运行虚拟机
  2. 从菜单 > 虚拟机 > 网络适配器 > 桥接。
  3. 在您的虚拟机中,找到您的 IP 地址,例如在 linux 中:ifconfig
  4. 从主机,使用 ssh ssh user@ip

我假设您已经安装并正在运行 SSH 服务。

答案4

我使用的是 VMware Workstation 17 Player。主机操作系统是 endeavouros。客户机操作系统是 Ubuntu 22.04.2 服务器。

  1. 点击右下角的网络图标,选择NAT。见下面第一个截图。

  2. 在客户机上执行以下操作。ip a在终端中输入并按 Enter。命令的输出显示在下面的第二个屏幕截图中。复制红色矩形中的 ip 地址。

  3. 在主机上执行以下操作。输入ssh user@ip将 user 替换为您的用户名,将 ip 替换为您在上一步中复制的 ip 地址。SSH 要求您输入密码。输入密码后,您应该登录到客户机上。

选择网络适配器配置 ip 输出

相关内容