我正在通过 VirtualBox 中的 Ubuntu 虚拟机连接到服务器ssh -L 8000:localhost:8000 <hostname>
。在虚拟机中,我可以通过“localhost:8000”访问服务器,但无法从 IP 地址“192.168.11.175:8000”(我有一个桥接适配器)访问。我无法通过 localhost 或 IP 访问主机操作系统(Windows 10)中的服务器。我如何从主机访问虚拟机 localhost?
运行ifconfig的结果:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.175 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::61a3:b162:4e6e:4731 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:30:85:c2 txqueuelen 1000 (Ethernet)
RX packets 4097 bytes 3519328 (3.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3347 bytes 551359 (551.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2179 bytes 1877351 (1.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2179 bytes 1877351 (1.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答案1
实现此目的的方法之一是ssh
从“主机”(您的 Windows 10 机器)进入您的 Ubuntu VM,使用-L
(用于本地端口转发)。
ssh
您出于某种原因选择 Windows 作为主机,因此没有像 macOS、Linux 等那样的内置命令。
所以我假设您可能正在使用像 PuTTY 这样的工具?
您可以使用 PuTTY 的配置对话框设置本地端口转发 - 查找更多信息,例如这里。
将端口 8000 从 Windows 主机转发到 Ubuntu VM 后,它将通过您提到的命令进一步转发ssh -L ...
到远程服务器。
答案2
ssh -L 8000:localhost:8000 <hostname>
意思是相同的ssh -L localhost:8000:localhost:8000 <hostname>
长话短说,第一个localhost:8000
在客户端(在您的情况下是 Win 10),第二个在服务器端。
标志-L
表示在客户端打开端口。因此,在成功建立连接后,您需要做的就是继续http://本地主机:8000在 Windows 10 主机上
更新:
如果您想使用,192.168.11.175:8000
请首先检查您的服务器是否绑定到该地址或0.0.0.0:8000
。
如果它监听localhost:8000
或127.0.0.1:8000
,那么就无法通过网络连接。
您可以使用以下命令检查所有绑定的 TCP 端口:
sudo netstat -46lnp
此处的标志p
(需要 sudo)启用带有程序名称的列。