如何通过主机外部SSH到VirtualBox客户?

我有一个Ubuntu虚拟机运行在我的Windows 7机器上。我如何设置它,以便我可以通过SSH从外部访问web服务器?

我发现步骤(设置VirtualBox主机和客户虚拟机之间的SSH访问 . sh ="http://www.wiredrevolution.com/virtualbox/setup-ssh-access-between-virtualbox-host-and-guest-vms)能够从我的主机ssh到我的guest,但这仍然给我留下了通过路由器访问它的问题。

我想我可以在我的Windows机器上安装一个SSH服务器,然后隧道几次(虽然我不是100%确定在本地,动态等方面使用什么,或者如何设置多个隧道?),但是有没有一种方法可以让虚拟机直接访问我的路由器,这样我就可以直接端口转发到它?

581720 次浏览

将VirtualBox中的适配器类型更改为桥接,并将客户机设置为使用DHCP或在DHCP边界之外设置静态IP地址。这将使虚拟机像家庭网络上的普通客户一样工作。然后,您可以移植向前。

保留NAT适配器并添加第二个仅限主机的适配器效果非常好,而且对于笔记本电脑(外部网络总是在变化)至关重要。

< a href = " http://muffinresearch.co。英国/档案/ 2010/02/08 / howto-ssh-into-virtualbox-3-linux-guests noreferrer“rel = > http://muffinresearch.co.uk/archives/2010/02/08/howto-ssh-into-virtualbox-3-linux-guests/ < / >

记住要在virtualbox本身中创建一个主机专用网络(GUI -> settings -> network),否则您无法在客户端上创建主机专用接口。

登录Linux VirtualBox虚拟机的最佳方式是端口转发。默认情况下,您应该已经有一个使用NAT的接口。然后转到网络设置,点击端口转发按钮。添加一个新的规则。插入“ssh”作为规则名。作为“主机端口”,插入3022。作为“来宾端口”,插入22。规则的其他部分可以留空。

或者从命令行

VBoxManage modifyvm myserver --natpf1 "ssh,tcp,,3022,,22"

其中“myserver”是创建的虚拟机名称。查看已添加的规则:

VBoxManage showvminfo myserver | grep 'Rule'

这是所有!请确保不要忘记在虚拟机中安装SSH服务器:

sudo apt-get install openssh-server

SSH进入客户虚拟机,如下所示:

ssh -p 3022 user@127.0.0.1

user是您在虚拟机中的用户名。

VirtualBox文档中有一个关于如何配置NAT端口转发的很好的解释: # EYZ0 < / p >

简单地将网络设置设置为桥接就可以了。

当你这样做时,你的IP会改变。然而,在我的情况下,它并没有立即改变。ifconfig返回相同的ip。我重启了虚拟机,然后砰的一声,ip设置为1,从192开始。*我立即被允许ssh访问。

在安全网络上,将网络设置为网桥可能不起作用。管理员只能允许每个端口有一个mac地址,如果交换机在一个端口上检测到多个mac地址,则阻塞端口。

在我看来,最好的解决方案是设置额外的网络接口来处理您希望在计算机上运行的额外服务。所以我有一个桥接接口,当我把我的笔记本电脑带回家时,我可以从我网络上的其他设备SSH到它,当我想从我的笔记本电脑SSH到我的VM时,当我连接到校园的eduroam wifi网络时,我有一个主机适配器。

对于Windows主机,您可以:

  1. 在virtualbox管理器:
    1. 在虚拟盒管理器中选择ctrl+G
    2. 然后进入网络面板
    3. 添加私网
      1. 确保“激活DHCP”未选中
      2. 李< / ol > < / > 李< / ol > < / >
      3. 网络管理(windows)
        1. 选择新创建的virtualbox主机专用适配器和物理网卡
        2. 右键选择“制作桥”
        3. 李< / ol > < / >
        4. 享受

您也可以在网络设置中使用桥接网络(或“桥接适配器”,在较新的版本中)。这将使您的VM与您的机器处于一个VLAN中。你可以像这样ssh进入VM。

ssh user@IP_OF_VM

如何为Solaris 10和Ubuntu 16.04做主机专用网络(更好的而不是桥接)

添加纯主机接口

  1. Virtualbox >文件>参数>网络>主机专用网络>添加
  2. 关闭虚拟机。
  3. 虚拟机设置>网络。第一个适配器应该是Nat,第二个适配器只能是主机。
  4. 打开cmd.exe,执行ipconfig /all。你应该看到以下几行:

    Ethernet adapter VirtualBox Host-Only Network:
    ...
    IPv4 Address. . . . . . . . . . . : 192.168.59.1
    

    guest中的第二个适配器也应该在192.168.59.*.

  5. 启动虚拟机。

Solaris 10

  1. 检查设置 ifconfig -a。您应该看到e1000g0和e1000g1。我们对e1000g1感兴趣。
  2. # EYZ0
  3. # EYZ0
  4. 从主机检查该接口是否可达:ping 192.168.56.10

重新启动时保留这些设置

# vi /etc/hostname.e1000g1
192.168.56.10 netmask 255.255.255.0
# reboot

配置ssh服务(管理)以root身份登录(不建议)

检查ssh是否开启

# svcs -a | grep ssh
online         15:29:57 svc:/network/ssh:default

修改/etc/ssh/sshd_config

PermitRootLogin yes

重启ssh服务

svcadm restart ssh

从主机检查它

ssh root@192.168.56.10

Ubuntu 16.04

列表界面:

ip addr

您应该看到像lo、enp0s3、enp0s8这样的三个接口。我们将使用第三种。

编辑/etc/network/interfaces

auto enp0s8
iface enp0s8 inet static
address 192.168.56.10
netmask 255.255.255.0

然后# EYZ0。检查enp0s8的地址是否正确。你应该看到你的ip:

 $ ip addr show enp0s8
...
inet 192.168.56.10/24 brd 192.168.56.255 scope global secondary enp0s8

如果不是,您可以运行sudo ifdown enp0s8 && sudo ifup enp0s8

424115年< a href = " https://superuser.com/questions/424083/virtualbox-host-ssh-to-guest/424115 " > https://superuser.com/questions/424083/virtualbox-host-ssh-to-guest/424115 # 424115 < / >

您也可以启动一个端口转发到您的主机,或任何其他服务器,从您的客户。这是特别有用的,如果你的客户是“锁定”或不能以其他方式完成ModifyVM选项(例如没有权限VBoxManage)。

三个次要要求是1)您是/可以登录到VirtualBox Guest(通过“控制台”GUI,另一个Guest等),2)您在VirtualBox主机(或其他服务器)上有一个帐户,3)SSH和TCP转发不被阻止。

假设你能满足这3个要求,以下是步骤:

  1. 在Guest上执行netstat -rn,查找到缺省路由目的0.0.0.0的Gateway地址。假设它是“10.0.2.2”。这个“网关”地址是VirtualBox主机虚拟IP(s)之一。
  2. 在Guest上,运行ssh -R 2222:localhost:22 10.0.2.2,其中“10.0.2.2”是VirtualBox服务器的IP地址-或-任何其他您希望移植到的服务器IP。
  3. 在主机上运行ssh 10.0.2.2 -p2222,其中10.0.2.2是步骤1中找到的默认网关/VBHost虚拟IP。如果它不是你要端口转发到的VirtualBox主机,那么命令是ssh localhost -p2222
SSH从INTERNET返回到您的家庭/办公室VirtualBox客户机

其他用户在这里提供的答案:How to SSH to a VirtualBox guest externally through a host?

... 帮我完成了从外面的因特网连接到我家里电脑的客用机的任务。你应该能够使用电脑,平板电脑和智能手机(android, IPhone等)连接。我增加了几个步骤,可能对其他人有帮助:

下面是我设置的一个快速图表:

  • # EYZ0

  • # EYZ0

  • # EYZ0

对我来说,关键是要意识到所有连接都是PASSING-THROUGH中间设备,用于从我的远程PC到我家里的客户虚拟机——因此是端口转发!

< p >指出:

. ssh客户端请求安全连接,服务器端处理安全连接
  • 我将从上面转发所选答案中使用的端口3022。

  • 在需要的地方输入您的IP(家庭调制解调器/路由器,主机IP,客户IP等),选择的名称只是示例-使用或更改。

1.在调制解调器的IP地址/路由器的外部IP地址上创建连接端口3022的ssh隧道。

# EYZ0

2.端口转发=我们正在通过连接从路由器到主机

  • 另外,确保路由器上的防火墙/IPtable规则允许端口转发(如果需要,打开)

  • 路由器的Pfwd SCREEN需要的条目:AppName:SSH_Fwd, Port_from: 3022, Protocol:both (UDP/TCP), IP_address:hostIP_address, Port_to:3022,其他的都可以为空

DD-WRT路由器软件资源/信息:

3.主机防火墙:开放端口3022 #,因此转发端口可以通过客户机

  • 主机:如果还没有安装VirtualBox、客户附加组件和客户机器

  • 配置客户计算机,然后按照下面的网络部分操作

  • 我使用VirtualBox GUI来设置客户的网络-比CLI更容易

  • 如果你想使用其他方法,请参考:VirtualBox/manual/ch06.html#natforward

4.有些人建议使用网桥适配器来访问LAN和LAN上的其他机器。这也增加了安全风险,因为如果防火墙设置不当,您的客户机器现在暴露在LAN机器和INTERNET黑客面前。因此,我选择了连接到NAT的网络适配器,以减少桥接安全风险。

在客户机器上执行以下操作:

  • 客户机VirtualBox网络设置:适配器1:连接到NAT
  • 客户机VirtualBox端口转发规则:名称:External_SSH,协议:TCP,主机端口:3022,客户端端口22,主机和客户端ip:空
  • 在网络部分单击advance,然后单击端口转发输入规则
  • 客户机防火墙:开放端口22 #以便ssh连接可以进入
  • 客户机器:确保ssh服务器已安装、配置正确并正在运行
  • LINUX测试查看ssh服务器是否运行w/命令:sudo service ssh status
  • 可以检查netstat以查看是否连接到客户机器上的端口22吗

另外,根据所使用的平台,有不同的ssh服务器和客户端。

  • # EYZ0
  • # EYZ0
  • # EYZ0

对于Ubuntu用户:

  • # EYZ0
  • # EYZ0

应该是这样。如果我犯了错误或者想要添加任何东西——请随意这样做——我仍然是一个新手。

希望这能帮助到一些人。好运!

使用NAT网卡和添加端口转发。注明实际主机ip。不要使用127.0.0.1或localhost。

在主机上使用putty(不支持端口转发)登录运行在虚拟机中的ubuntu虚拟机:

  1. 在Virtualbox管理器中选择虚拟机,单击设置图标。然后进入网络,启用两个适配器,如下所示:

    • 适配器1(用于互联网接入):附属-> NAT,高级->检查线缆连接。
    • 适配器2:Attached to ->主机专用适配器,Advanced ->检查线缆连接和混杂模式->允许所有。
    • 李< / ul > < / >
    • 启动ubuntu虚拟机。

    • 以root用户登录虚拟机。
    • 编辑文件'/etc/network/interfaces',如下所示并保存:

      auto lo
      iface lo inet loopback
      
      
      auto eth0
      iface eth0 inet dhcp
      
      
      auto eth1
      iface eth1 inet dhcp
      
    • Restart the VM.

    • Login to the VM and run below command to check the IP allocated to eth1:

      ifconfig
      
    • Use this IP to open putty session for the VM.

为了从您的主机上ssh到运行在VirtualBox中的Ubuntu VM,您需要为VM设置两个网络适配器。

首先,如果尚未关闭,请关闭虚拟机。

然后选择虚拟机,在VirtualBox工具栏中单击“设置”菜单:

enter image description here

设置适配器1

enter image description here

设置适配器2

enter image description here

(注意:不需要设置端口转发)

就是这样。设置完成后,就可以启动VM了。在你的虚拟机中,网络配置如下所示,你也可以上网:

enter image description here

同样在你的主机上,你可以ssh到你的VM:

enter image description here

确保虚拟机中已安装并运行SSH服务器。

$ ps aux | grep sshd
root 864 0.1 0.5 65512 5392 ? Ss 22:10 0:00 /usr/sbin/sshd -D

如果没有,请安装:

$ sudo apt-get install openssh-server

另外供您参考:

  • 我的VirtualBox版本:5.2.6 r120293 (Qt5.6.2), 2018
  • 我的Ubuntu版本:Ubuntu 16.04.3 LTS
  • 我的主机:Windows 10

Ubuntu 18.04 LTS

配置桥接以查看服务器ip,并且连接时没有“端口转发”

VirtualBox >右键单击服务器>设置> Network > enable适配器2 > select " bridging " >混杂模式:允许所有>检查>启动服务器连接的线缆

在ubuntu服务器上,编辑sudo nano /etc/netplan/*init.yaml文件,

# EYZ0

network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
enp0s8:
addresses: [192.168.0.200/24]
dhcp4: no
dhcp6: no
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
version: 2

这些命令将帮助你

nano /etc/netplan/file.yaml     # file to specify the rules of network
reboot now                      # restart ubuntu server right now
netplan apply                   # do after edited *.yaml, to apply changes
ifconfig -a                     # show interfaces with ip, netmask, broadcast, etc...
ping google.com                 # to see if there is internet

在Ubuntu 18.04 LTS Server上配置静态IP地址- with NetPlan