- VirtualBox 版本:6.0.6
- 主机操作系统:Windows 10
- 客户操作系统:Ubuntu 18.04
我如何进行虚拟机管理以便能够从 LAN 外的另一台服务器通过 SSH 进入虚拟机?
我尝试过使用 NAT 适配器和端口转发、桥接适配器和仅主机设置,但每次我尝试通过 SSH 进入我的 VM 时,它都会响应错误。
ssh:...连接超时
我可以使用 SSH 从我自己的计算机通过 SSH 进入 VM,没有任何问题。
答案1
@j.dawg
我也有同样的问题。
绝对是案件@Christopher Hostage 提到的很常见但不是我想要的。
即我需要让电脑外部LAN 访问 LAN 内部主机(Windows)内的 Linux VM。
以下是我对这个问题的简短回答,请参考这篇精彩的文章作者:Michel Blancard:
一种方法是配置 LAN 的路由器或 NAT 网关:
- 在路由器中使用 DMZ 来公开虚拟机。(有风险:只有当您有信心将此虚拟机公开给外界时才可以)
- 更好的方法是使用端口映射。
另一种方法是隧道
- 商业服务
- 或者将 SSH 远程端口转发到已启用的 SSH 服务器。
我采用的解决方案的一些细节(更多细节请查看文章)
SSH 远程端口转发
确保在远程服务器的 /etc/ssh/sshd_config 中设置了以下选项,并在需要时重新加载 SSH 服务器:
AllowTcpForwarding yes
GatewayPorts yes
从本地工作站设置远程端口转发(隧道):
ssh -nN -R 8888:localhost:8889 [email protected]
这里 :
- 1.2.3.4是远程服务器的公网 IP 地址
- 8888是服务器正在监听的端口
- 8889您想要公开的工作站端口是
- 远程用户是具有使用 ssh 连接服务器权限的用户的名称
-n
阻止从 stdin 读取,因为您不想从命令行使用隧道-N
表示你不想执行远程命令,只做端口转发-R
(作为反向或远程端口转发)意味着连接从远程服务器转发到本地工作站,而不是端口转发,其中启动隧道的一端也是启动跨隧道通信的一端。- (可选)您可以使用特定的 ssh 密钥代替默认的 ~/.ssh/id_rsa : -i ~/.ssh/id_rsa_2
测试
监听工作站的目标端口:
netcat -l -p 8889
从世界任何地方发送消息:
echo “abc” | nc -v remoteserver 8888
您应该在工作站的终端上收到“abc”。
故障排除
如果消息没有正确传达,ssh 客户端的详细选项 (-v) 非常有用。您还可以使用 netstat 验证每个人是否都在按预期监听:
netstat -pln