通过ssh代理从宿主机连接VirtualBox虚拟机
VirtualBox默认为客户虚拟机Linux(Guest)提供的是以NAT方式借助宿主机(Host)访问外网。
如果想要从宿主机访问客户机,则相当于从外网访问内网的机器。被隔了一层NAT,客户机可以访问宿主机,宿主机却不可以访问客户机。
如果是实现从宿主机访问客户机,网上的做法几乎都是:在VirtualBox的网络设置那里,增加一个Host-Only的网络,开启Adapter 2并使用此网络。 但是,奇怪的是:我在6.0版本macOS上的VirtualBox上,无论如何都找不到怎样创建一个Host-Only的网络。所以,上面的办法行不通。
然后,由于客户机是可以访问宿主机的,所以我想到了一个简单可行的办法:用ssh代理转发。其实我在《SSH的三种端口转发(Port forwarding)/ 隧道协议概要》早就讲过这种方式。
以下是几个步骤:
开启宿主机和客户机的ssh服务
宿主机:我在之前的一篇文章《快速开启macOS上的ssh服务》提到了怎样在macOS上快速开启ssh服务。这个方法正好用到它。
客户机:sudo apt-get install openssh-server
,安装后,sshd会在22号端口上面监听。
从客户机登录宿主机并开启转发
采用ssh的远程转发功能,可以在宿主机上面监听一个端口,来自此端口的连接将会通过ssh隧道转发到指定地点。
在虚拟机里面执行以下命令登录宿主机:
$ ssh -L 127.0.0.1:22:192.168.1.100:10022 tao@192.168.1.100
其中:
127.0.0.1:22
是客户机的ssh服务地址192.168.1.100:10022
是宿主机的监听地址tao @192.168.1.100
是宿主机的登录用户及地址
请根据自己的情况进行相应的修改。
从宿主机登录到客户机
这上面的命令执行成功以后,就可以通过宿主机的监听地址登录到客户机了。
$ ssh -p 10022 root@192.168.1.100
其中:
10022
和192.168.1.100
是宿主机监听地址root
是客户机的登录用户名
如此,就可以成功地登录到客户机(虚拟机)内部的网络了。