我有一个运行 ubuntu 的虚拟机。我通过 SSH 连接到该虚拟机来使用它。我的问题始于一些策略实施,这些策略实施会阻止来自互联网的所有传入流量。
虚拟机可以无限制地进行出站连接,但是不能为传入连接打开任何到互联网的端口。
假设我可以在虚拟机上执行脚本,我想知道是否可以让它使用某个端口连接到我的 IP,并通过它建立 SSH 会话。
我想象的是这样的:
虚拟机:
- 尝试通过端口 6543 建立与我的固定 IP 地址 1.1.1.1 的连接。
- 不断重试,直到建立连接
- 一旦建立连接,保持该连接打开。
我的笔记本电脑:
- 运行一些守护进程来监听端口 6543,并等待来自虚拟机的连接
- 一旦建立连接,就在本地监听某个端口,比如 8022 ssh 到 localhost:8022 并建立到我的虚拟机的 SSH 会话
我的网络知识告诉我这是可行的。但是,我不确定如何实现它,而且是否已经有了相应的实用程序。
答案1
您所描述的可以通过使用 ssh 远程转发来实现。
假设您的虚拟机和本地机器上都有 ssh 守护程序在运行(并监听默认端口 22),您需要在虚拟机中运行此命令(假设1.1.1.1
是您的本地 IP 地址):
ssh -fN -R 2222:localhost:22 1.1.1.1
这将创建一个 ssh 隧道,用于侦听本地计算机中的端口 2222,并将此端口转发到虚拟机中的端口 22。这意味着,您1.1.1.1
现在可以使用以下命令从计算机连接到虚拟机:
ssh -p 2222 localhost
更新(一些附加信息)
这是让-fN
此命令在后台运行。请注意,这可能会在一段时间后被终止,如果您需要永久运行此命令,则需要制作一个脚本/cronjob,以便在它因任何原因终止时重新启动它,并且您还应该配置一些客户端和服务器保持活动以防止隧道连接因不活动而关闭。