Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过主机从外部SSH到VirtualBox来宾?_Ssh_Virtualbox - Fatal编程技术网

如何通过主机从外部SSH到VirtualBox来宾?

如何通过主机从外部SSH到VirtualBox来宾?,ssh,virtualbox,Ssh,Virtualbox,我有一个运行在Windows7机器上的Ubuntu虚拟机。如何设置它,以便通过SSH从外部访问Web服务器 我发现steps()能够从我的主机ssh到我的客户机,但这仍然给我留下了通过路由器访问它的问题 我想我可以在我的Windows机器上安装一个SSH服务器,然后进行几次隧道(尽管我不100%确定在本地、动态等方面使用什么,或者如何设置多个隧道?),但是有没有办法让我的路由器可以直接访问虚拟机,这样我就可以直接将端口转发到它?将VirtualBox中的适配器类型更改为bridged,并将来宾设

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

我发现steps()能够从我的主机ssh到我的客户机,但这仍然给我留下了通过路由器访问它的问题


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

将VirtualBox中的适配器类型更改为bridged,并将来宾设置为使用DHCP边界之外的静态端口。这将导致虚拟机像家庭网络上的普通来宾一样工作。然后可以向前移植。

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


请记住在virtualbox本身(GUI->settings->network)中创建一个仅限主机的网络,否则您无法在guest上创建仅限主机的界面。

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

或者从命令行

VBoxManage modifyvm myserver--natpf1“ssh、tcp、3022、22”
其中'myserver'是所创建VM的名称。检查添加的规则:

VBoxManage showvminfo myserver | grep“规则”
就这些!请确保不要忘记在VM中安装服务器:

sudo apt get安装openssh服务器
要使用SSH连接到来宾VM,请编写:

ssh-p3022user@127.0.0.1

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

有关如何使用NAT配置端口转发的详细说明,请参见VirtualBox文档:
$ ps aux | grep sshd
root 864 0.1 0.5 65512 5392 ? Ss 22:10 0:00 /usr/sbin/sshd -D

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


当你这样做时,你的IP将会改变。然而,在我的情况下,它并没有立即改变
ifconfig
返回了相同的ip。我重新启动了vm并启动了boom,ip将其自身设置为一开始192.*并且立即允许我进行ssh访问。

在安全网络上,将网络设置为网桥可能无法工作。如果交换机在一个端口上检测到多个mac,则管理员只能允许每个端口使用一个mac地址,甚至更糟的是阻止该端口


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

对于Windows主机,您可以:

  • 在virtualbox manager中:
  • 在virtualbox管理器中选择ctrl+G
  • 然后转到网络面板
  • 添加专用网络
  • 确保未选择激活DHCP
  • 在网络管理(windows)中
  • 选择新创建的virtualbox纯主机适配器和物理网卡
  • 右键单击并选择“制作桥”
  • 享受

  • 您还可以在网络设置中使用桥接网络(或较新版本中的“桥接适配器”)。这将把你的虚拟机和你的机器放在一个VLAN中。因此,您可以像这样ssh到VM中

    sshuser@IP_OF_VM

    如何为Solaris 10和Ubuntu 16.04实现纯主机网络(而不是桥接) 添加仅主机接口
  • Virtualbox>文件>首选项>网络>仅主机网络>添加
  • 关闭虚拟机
  • 虚拟机的设置>网络。第一个适配器应为Nat,仅限第二个主机
  • 启动cmd.exe并运行
    ipconfig/all
    。您应该看到以下行:

    Ethernet adapter VirtualBox Host-Only Network:
       ...
       IPv4 Address. . . . . . . . . . . : 192.168.59.1
    
    guest中的第二个适配器也应该在192.168.59.*中

  • 启动虚拟机

  • Solaris 10
  • 选中
    ifconfig-a
    。您应该看到e1000g0和e1000g1。我们对e1000g1感兴趣
  • ifconfig e1000g down
  • ifconfig e1000g 192.168.56.10网络掩码255.255.255.0以上
  • 从主机检查此接口是否可访问:
    ping 192.168.56.10
  • 重新启动时保留这些设置 服务()以root用户身份登录(未通知) 检查ssh是否已启用

    # svcs -a | grep ssh
    online         15:29:57 svc:/network/ssh:default
    
    修改/etc/ssh/sshd\u config以便

    PermitRootLogin yes
    
    重新启动ssh服务

    svcadm restart ssh
    
    从主机检查它

    ssh root@192.168.56.10
    
    Ubuntu 16.04 列出接口:

    ip addr
    
    您应该看到三个接口,如lo、enp0s3、enp0s8。我们将使用第三个

    编辑/etc/网络/接口

    auto enp0s8
    iface enp0s8 inet static
        address 192.168.56.10
        netmask 255.255.255.0
    
    然后
    sudo ifup enp0s8
    。检查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


    您还可以启动从来宾服务器转发到主机或任何其他服务器的端口。如果您的来宾处于“锁定”状态或无法完成ModifyVM选项(例如,没有VBoxManage权限),此选项尤其有用

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

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

  • 在Guest上,运行
    netstat-rn
    ,找到默认路由目的地0.0.0的网关地址。假设它是“10.0.2.2”。此“网关”地址是VirtualBox主机虚拟IP中的一个
  • 对客人,快跑
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
    ifconfig
    
    $ 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
    
    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