如何设置它以便我可以通过 SSH 连接到我的 VMWare 来宾 VM?

Der*_*urn 15 vmware ssh

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

小智 22

实际上,有很多很好的理由可以将 NAT 与您的 VM 一起使用,而不是桥接接口..(这是一个老问题,但它是我搜索如何执行此操作的第一个结果,从我所做的 VirtualBox 迁移一直如此,所以我认为值得添加)

使用 NAT 的几个原因是:

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

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

  • 因此,首先您需要决定允许从主机“外部”向虚拟机/来宾提供哪些内容(注意如下,您可以从主机本身轻松访问它)。一个安全的选择是只向子网上的机器公开/允许 SSH(端口 22)。如果您在虚拟机上有网络服务器等,您还可以允许端口 80/443,您还可以使用“隧道”使用 SSH 访问其他服务(将在下面给出示例),并使用 FUSE/SSHFS 为您的主机提供文件系统访问..(或 VMWare 上的共享文件夹工具,但我还没有使用过)。

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

  • 接下来,在决定了哪些服务后,您需要

    • 允许在您的主机上通过 iptables/防火墙连接到“外部”端口。sshd 可能已经在主机上使用了端口 22,因此您可能会使用类似 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 ACCEPT `

    • 通过在 /etc/vmware/ 的底部添加类似的内容,在主 VMware DHCP 配置中为您的虚拟机提供一个保留 IP(可选,但如果您想从主机“针孔”到它,则更容易依赖) 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; 
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 通过将其添加到 /etc/vmware/vmnet8/nat/nat.conf 的 [incomingtcp] 部分,告诉 VMWare 将连接从 22222 转发到 guest:22,然后重新启动 vmware 服务(请参阅下面的注释)

      [传入TCP]

      22222 = 192.168.198.10:22

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

所以,一旦这一切都完成了,你就可以在你的笔记本电脑或局域网上的其他机器上,通过 ssh 连接到你的工作站(vmware 主机)在 22222 上,然后你就会被转移到你告诉它转发给你的客人那里。如上所述,如果您还说希望能够连接到来宾上的 postgres 服务器(或通常未加密的 vnc 服务器),您可以在同一命令中建立隧道(而不是将其也添加到 dhcp conf)。例如

console ~> ssh root@hostip -p 22222 -L 54320:localhost:5432
Run Code Online (Sandbox Code Playgroud)

并且您将通过 vmware 中的 ip forward 进入来宾,并且可以将您的 pgadmin3 工具指向笔记本电脑上的 localhost:54320(非特权),并且您在网络上的流量将被加密。(注意'localhost'已经转发给客人了)

笔记

  • 有各种各样的方法可以做到这一点。首先,您可以通过隧道连接到主机并在 -L 中指定来宾的 ip,它会“爆发”并指向您那里,但是 nat.conf 选项很好,并且方便,而且您不必每次都键入它。还有其他的端口转发方式
  • 我在虚拟网络 gui 的几个线程上看到过引用来执行此操作(就像 virtualbox 一样),但我在这个版本中找不到它
  • 我不使用 Windows,所以即使我认为配置为主机非常相似,我也不确定。NAT 配置应该适用于任何 vmware 来宾(虽然我没有使用任何其他版本的 VMWare)
  • VMware 设置了一条路由,以便主机可以直接联系 NAT 来宾,从主机的控制台 IE,我可以直接 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 从 linux 注释中可以看出,使用 systemd init 对 vmware 进行了一些摆弄以自动启动,并且我发现我不能只是重新启动 vmware(vmci 不会再次加载),我必须重新启动我的机器使上面的 NAT/DHCP 内容保持不变,但您可能没有问题。虽然有一些带有 systemd 解决方案的线程


Jou*_*eek 13

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

如果使用NAT接口,可能会比较复杂,一般不推荐使用。

  • 对于不知道的人,不要忘记使用 `service sshd start` 启动 ssh 服务器,或者如果你想在启动时启动它,请运行 `chkconfig sshd on` (2认同)