如何通过主机对外ssh到virtualbox来宾?

How to SSH to a VirtualBox guest externally through a host?

我的Windows7机器上运行着一个UbuntuVM。如何设置它以便通过ssh从外部访问Web服务器?

我发现步骤(在virtualbox主机和guest vms之间设置ssh访问)能够从主机对我的客户进行ssh访问,但仍然存在通过路由器访问它的问题。

我想我可以在我的Windows机器上安装一个ssh服务器,然后进行几次隧道(尽管我不完全确定在本地、动态等方面使用什么,或者如何设置多个隧道?)但是有没有一种方法可以让虚拟机直接访问我的路由器,这样我就可以直接连接到它?


登录到来宾Linux虚拟机的最佳方法是端口转发。默认情况下,您应该已经有了一个使用NAT的接口。然后转到网络设置并单击端口转发按钮。添加新规则。作为规则名,插入"ssh"。作为"主机端口",插入3022。作为"客港",插入22。规则中的其他内容都可以留空。

或者从命令行

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

其中"myserver"是创建的虚拟机的名称。检查添加的规则:

1
VBoxManage showvminfo myserver | grep 'Rule'

这就是全部!请确保不要忘记在VM中安装ssh服务器:

1
sudo apt-get install openssh-server

要在来宾虚拟机中使用ssh,请编写:

1
ssh -p 3022 [email protected]

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


将virtualbox中的适配器类型更改为bridged,并将guest设置为使用DHCP或将静态IP地址设置为超出DHCP边界。这将导致虚拟机在您的家庭网络上表现得像普通访客。然后你可以继续前进。


保持Nat适配器并添加第二个只支持主机的适配器工作得非常出色,这对于笔记本电脑(外部网络总是在变化)至关重要。

http://muffirnesearch.co.uk/archives/2010/02/08/howto-ssh-into-virtualbox-3-linux-guests/

记住在virtualbox本身中创建一个仅主机网络(gui->settings->network),否则就不能在来宾上创建仅主机接口。


如何为Solaris 10和Ubuntu 16.04实现仅主机网络(优于桥接网络)添加仅主机接口

  • virtualbox>文件>首选项>网络>仅主机网络>添加
  • 关闭虚拟机。
  • 虚拟机的设置>网络。第一个适配器应该是NAT,仅第二个主机。
  • 启动cmd.exe并运行ipconfig /all。您应该看到行:

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

    来宾系统中的第二个适配器也应位于192.168.59.*中。

  • 启动虚拟机。

  • 索拉里斯10

  • 检查设置ifconfig -a。您应该看到e1000g0和e1000g1。我们对E1000G1感兴趣。
  • ifconfig e1000g down
  • ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  • 如果此接口可访问,则从主机检查:ping 192.168.56.10
  • 重新启动时保留这些设置

    1
    2
    3
    # vi /etc/hostname.e1000g1
    192.168.56.10 netmask 255.255.255.0
    # reboot

    将ssh服务(管理)配置为以根用户身份登录(未通知)

    检查是否启用了ssh

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

    修改/etc/ssh/sshd_配置,以便

    1
    PermitRootLogin yes

    重新启动ssh服务

    1
    svcadm restart ssh

    从主机检查

    Ubuntu 16.04

    列表接口:

    1
    ip addr

    您应该看到三个接口,如LO、ENP0S3、ENP0S8。我们将使用第三个。

    编辑/etc/网络/接口

    1
    2
    3
    4
    auto enp0s8
    iface enp0s8 inet static
        address 192.168.56.10
        netmask 255.255.255.0

    然后是sudo ifup enp0s8。检查ENP0S8的地址是否正确。您应该看到您的IP:

    1
    2
    3
     $ 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

    https://superuser.com/questions/424083/virtualbox主机ssh to guest/424115 424115


    您也可以在网络设置中使用桥接网络(或在较新版本中使用"桥接适配器")。这将使您的虚拟机与您的计算机在VLAN中。所以你可以像这样通过ssh进入vm。

    ssh user@IP_OF_VM


    为了从主机对运行在virtualbox中的UbuntuVM进行ssh,需要为该VM设置两个网络适配器。

    首先,如果还没有停止虚拟机。

    然后选择虚拟机并单击"虚拟机"工具栏中的"设置"菜单:

    enter image description here

    设置适配器1

    enter image description here

    设置适配器2

    enter image description here

    (注意:您不需要设置任何端口转发。)

    就是这样。一旦设置好,就可以启动虚拟机。在您的虚拟机中,网络配置如下所示,您也可以访问Internet:

    enter image description here

    同样,在主机中,您可以ssh到vm:

    enter image description here

    确保ssh服务器已安装并在VM中运行。

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

    如果没有,安装它:

    1
    $ sudo apt-get install openssh-server

    另请参考:

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


    ssh从Internet返回您的家庭/办公室virtualbox客户机

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

    …帮助我完成了从互联网到家用电脑客户机的连接任务。您应该能够使用计算机、平板电脑和智能手机(Android、iPhone等)进行连接。我增加了一些步骤,以防对其他人有所帮助:

    以下是我的设置的快速图表:

    • Remote device ---> INTERNET --> MODEM --> ROUTER --> HOST MACHINE --> GUEST VM

    • Remote device (ssh client) ---> PASS THRU DEVICES ---> GUEST VM (ssh server)

    • Remote device (leave ssh port 3022) ---> INTERNET --> MODEM --> ROUTER (FWD frm:p3022 to:p3022)--> HOST MACHINE (FWD frm:p3022 to:p22) --> GUEST VM (arrive ssh port 22)

    对我来说,关键是要认识到所有的连接都是PASSING-THROUGH中介设备,从我的远程PC到我家里的客户虚拟机,从而实现端口转发!

    笔记:*需要ssh客户机请求安全连接,需要运行ssh服务器来处理安全连接。

    • 我将转发上面所选答案中使用的端口3022。

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

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

    ssh client/device possible commands: ssh -p 3022 user-name@home_external_IP

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

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

    • 路由器的pfwd屏幕所需条目:appname:ssh-fwd,port-from:3022,protocol:both(udp/tcp),ip-address:hostip-address,port-to:3022,其他都可以为空。

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

    • DD-WRT端口转发

    • DD-WRT静态u DHCP

    3.主机防火墙:打开端口3022,转发的端口可以通过到客户机

    • 主机:安装virtualbox、guest additions和guest machine(如果尚未安装)。

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

    • 我使用virtualbox GUI来设置来宾网络-比CLI更简单

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

    4.有些人建议使用网桥适配器来访问guest=LAN和LAN上的其他机器。这也会增加安全风险,因为如果防火墙设置不正确,现在您的客户机将暴露在局域网计算机和可能的互联网黑客面前。所以我选择了连接到NAT的网络适配器,以减少桥接安全风险。

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

    • 来宾计算机虚拟机网络设置:适配器1:连接到NAT
    • 来宾计算机虚拟机端口转发规则:名称:外部_ssh,协议:TCP,主机端口:3022,来宾端口22,主机和来宾IP:保留为空
    • 单击"网络"部分的"高级",然后单击"端口转发"以输入规则。
    • 来宾计算机防火墙:打开端口22,以便ssh连接可以进入
    • 来宾计算机:确保ssh服务器已安装、配置正确并正在运行
    • Linux测试以查看ssh服务器是否运行w/command:sudo service ssh status
    • 可以检查netstat以查看是否连接到客户机上的端口22

    还有不同的ssh服务器和客户机,这取决于平台的使用。

    • wikipedia/Secure_Shell
    • wikipedia/Comparison_of_SSH_servers
    • wikipedia/Comparison_of_SSH_clients

    对于Ubuntu用户:

    • ubuntu community: SSHOpenSSH/Configuring
    • ubuntu/community: OpenSSH/Keys

    应该就是这样。如果我犯了一个错误,或者想添加任何东西——请随意添加——我仍然是一个笨蛋。

    希望这能帮助别人。祝你好运!


    对于Windows主机,您可以:

  • 在VirtualBox Manager中:
  • 在VirtualBox Manager中选择ctrl+g
  • 然后转到网络面板
  • 添加专用网络
  • 确保未选择激活DHCP
  • 在网络管理(Windows)中
  • 选择新创建的virtualbox仅主机适配器和物理网卡
  • 右键单击并选择"Make Bridge"
  • 享受

  • 按照以下步骤使用Putty(不带端口转发)从主机登录在虚拟机中运行的Ubuntu虚拟机:

  • 在VirtualBox Manager上选择虚拟机,单击设置图标。然后进入网络并启用两个适配器,如下所示:

    • 适配器1(用于互联网接入):连接到->NAT,高级->检查连接的电缆。
    • 适配器2:连接到->仅主机适配器,高级->检查电缆连接和混杂模式->允许所有。
  • 启动Ubuntu虚拟机。

  • 以根用户身份登录到虚拟机。
  • 编辑文件'/etc/network/interfaces'如下并保存:

    1
    2
    3
    4
    5
    6
    7
    8
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet dhcp

    auto eth1
    iface eth1 inet dhcp
  • 重新启动虚拟机。

  • 登录到VM并运行以下命令以检查分配给eth1的IP:

    1
    ifconfig
  • 使用此IP为虚拟机打开Putty会话。


  • 您还可以从客户机向主机或任何其他服务器发起端口转发。如果您的客人被"锁定"或无法完成modifyvm选项(例如没有vboxmanage的权限),则此选项尤其有用。

    三个次要要求是:1)您可以登录到virtualbox guest(通过"控制台"GUI、另一个guest等);2)您在virtualbox主机(或其他服务器)上拥有帐户;3)SSH和TCP转发未被阻止。

    假设您可以满足3个要求,以下是步骤:

  • 在客户机上,运行netstat -rn,找到默认路由目标0.0.0.0的网关地址。假设它是"10.0.2.2"。此"网关"地址是(virtualbox主机虚拟IP之一)。
  • 在来宾服务器上,运行ssh -R 2222:localhost:22 10.0.2.2,其中"10.0.2.2"是virtualbox服务器的IP地址,或者是您希望转发到的任何其他服务器IP。
  • 在主机上运行ssh 10.0.2.2 -p2222,其中10.0.2.2是步骤1中找到的默认网关/vbhost虚拟IP。如果不是端口转发到的virtualbox主机,则命令为ssh localhost -p2222

  • 在virtualbox文档中可以找到一个关于如何使用nat配置端口转发的好解释:http://www.virtualbox.org/manual/ch06.html_natforward


    Ubuntu 18.04升

    配置为桥接以查看服务器IP,连接时不使用"端口转发"

    virtualbox>右键单击服务器>设置>网络>启用适配器2>选择"桥接">混杂模式:允许所有>检查连接的电缆>启动服务器

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

    我的样本文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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

    有助于您的命令

    1
    2
    3
    4
    5
    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服务器上配置静态IP地址-使用netplan


    使用NAT网络适配器并添加端口转发。提及实际主机IP。不要使用127.0.0.1或localhost。


    在安全网络上,将网络设置为网桥可能不起作用。如果交换机在一个端口上检测到多个mac,管理员只能允许每个端口有一个mac地址,或者更糟的情况是阻止该端口。

    我认为最好的解决方案是设置额外的网络接口来处理您希望在计算机上运行的额外服务。因此,当我把笔记本电脑带回家时,我有一个网桥接口,允许桥接,当我想在校园内连接到EduRoam WiFi网络时,我可以从网络上的其他设备和仅主机的适配器ssh进入我的笔记本电脑的vm。


    只需将网络设置设置为Bridged,我就成功了。

    当你这样做的时候你的IP将会改变。但是,在我的例子中,它并没有立即改变。ifconfig返回了相同的IP。我重新启动了vm和boom,IP设置为从192*开始一次,我立即被允许访问ssh。