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

我发现步骤(在VirtualBox主机和客户虚拟机之间设置SSH访问)能够从我的主机SSH到我的客户,但这仍然留给我通过路由器访问它的问题。

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


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

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

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端口转发的很好的解释: http://www.virtualbox.org/manual/ch06.html#natforward

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

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

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

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

对于Windows主机,您可以:

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

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

ssh user@IP_OF_VM

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

添加纯主机接口

Virtualbox >文件>参数>网络>主机专用网络>添加 关闭虚拟机。 虚拟机设置>网络。第一个适配器应该是Nat,第二个适配器只能是主机。 打开cmd.exe,执行ipconfig /all命令。你应该看到以下几行: 以太网适配器VirtualBox主机专用网络: ... IPv4地址. . . . . . . . . . .: 192.168.59.1 guest中的第二个适配器也应该在192.168.59.*中。 启动虚拟机。

Solaris 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

重新启动时保留这些设置

# 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

然后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

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个要求,以下是步骤:

On the Guest, run netstat -rn and find the Gateway address to the default route destination 0.0.0.0. Let's say it's "10.0.2.2". This 'Gateway' address is (one of) the VirtualBox Host virtual IP(s). On the Guest, run ssh -R 2222:localhost:22 10.0.2.2 where "10.0.2.2" is the VirtualBox server's IP address -OR- any other server IP you wish to port forward to. On the Host, run ssh 10.0.2.2 -p2222 where 10.0.2.2 is the default gateway/VBHost virtual IP found in step 1. If it is NOT the VirtualBox host you are port forwarding to, then the command is ssh localhost -p2222

SSH从INTERNET返回到您的家庭/办公室VirtualBox客户机

其他用户在这里提供的答案:如何通过主机从外部SSH到VirtualBox客户端?

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

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

远端设备——> INTERNET——> MODEM——> ROUTER——> HOST MACHINE——> GUEST VM 远程设备(ssh客户端)——> PASS THRU DEVICES——> GUEST VM (ssh服务器) 远程设备(离开ssh端口3022)——> INTERNET——> MODEM——> ROUTER (FWD frm:p3022到:p3022)——> HOST MACHINE (FWD frm:p3022到:p22)——> GUEST VM(到达ssh端口22)

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

注: *需要ssh客户端请求一个安全连接和运行的ssh服务器来处理安全连接。

我将从上面转发所选答案中使用的端口3022。 在需要的地方输入您的IP(家庭调制解调器/路由器,主机IP,客户IP等),选择的名称只是示例-使用或更改。

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

ssh客户端/设备可能命令:ssh -p 3022 user-name@home_external_IP

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

另外,确保路由器上的防火墙/IPtable规则允许端口转发(如果需要,打开) 路由器的Pfwd SCREEN需要的条目:AppName:SSH_Fwd, Port_from: 3022, Protocol:both (UDP/TCP), IP_address:hostIP_address, Port_to:3022,其他的都可以为空

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

dd - wrt Port_Forwarding dd - wrt Static_DHCP

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

主机:如果还没有安装VirtualBox、客户附加组件和客户机器 配置客户计算机,然后按照下面的网络部分操作 我使用VirtualBox GUI来设置客户的网络-比CLI更容易 如果您想使用其他方法,请参考:VirtualBox/manual/ch06.html#natforward

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

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

Guest Machine VirtualBox Network settings: Adapter 1: Attached to NAT Guest Machine VirtualBox Port Forwarding Rule: Name:External_SSH, Protocol:TCP, Host Port: 3022, Guest Port 22, Host&guest IPs:leave blank click on advance in Network section then click on Port forwarding to enter rules Guest Machine Firewall: open port 22 #so ssh connection can enter Guest Machine: Make sure that ssh server is installed, configured properly, and running LINUX test to see if ssh server running w/command: sudo service ssh status Can check netstat to see if connection made to port 22 on the guest machine

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

维基百科/ Secure_Shell 维基百科/ Comparison_of_SSH_servers 维基百科/ Comparison_of_SSH_clients

对于Ubuntu用户:

ubuntu社区:SSHOpenSSH/配置 ubuntu社区:OpenSSH -键

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

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

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

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

On Virtualbox manager select the vm, click on settings icon. Then go Networks and enable two adaptors as below: Adaptor 1 (For internet access): Attached to -> NAT, Advanced -> Check the cable connected. Adaptor 2: Attached to -> Host only adaptor, Advanced -> Check the cable connected and Promiscuous mode -> Allow all. Start the ubuntu vm. Login to the VM as root. Edit the file '/etc/network/interfaces' as below and save it: 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工具栏中单击“设置”菜单:

设置适配器1

设置适配器2

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

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

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

确保虚拟机中已安装并运行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

优麒麟 18.04 LTS

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

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

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

我的示例文件:

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服务器上配置静态IP地址-使用NetPlan