通过 SSH 向远程计算机提供互联网服务?

通过 SSH 向远程计算机提供互联网服务?

这个问题被问过几次,但我的设置与其他设置没什么不同。

我的机器位于没有互联网的封闭网络中,并且我可以 sudo 访问该机器。但我无法从笔记本电脑直接连接到远程计算机。我必须通过linux跳转服务器,并且我在跳转服务器中没有root权限。我只能通过 ssh 连接到我的跳转服务器,并且可以再次通过 ssh 连接到我的远程计算机。

我无法打开任何其他端口。如何将笔记本电脑的互联网连接共享到远程计算机,以便任何更新或软件提取都可以无缝进行。

目前,当我有互联网连接来跳转服务器时,我可以使用命令与远程计算机共享它

ssh -R PORT_WITH_INTERNET:localhost:PORT_WITH_INTERNET [email protected]

答案1

使用sshuttle, 哪个:

透明代理服务器,充当穷人的 VPN。通过 ssh 转发。不需要管理员。适用于 Linux 和 MacOS。支持 DNS 隧道。

只要您的中间计算机安装了 Python,它sshuttle就会进行连接、自行传输并设置您的本地计算机以通过 SSH 连接转发所有流量(或选定的流量)。

另一个好处是它与 TCP 一起工作而不是反对它,因此您可以通过连接获得正确的性能 - 常规 SSH 隧道往往会获得较差的扩展性,因为没有数据包丢失。

您可以直接使用它来执行您想要的操作:

sudo sshuttle --dns -r user@jump 0/0

这将通过 SSH 连接到 user@jump 并通过该连接转发所有流量和所有 DNS 请求。您不需要在远程计算机上进行任何设置,只需要本地计算机上的管理权限(以设置数据包过滤规则)。

sshuttle为某些发行版打包,但从本地安装非常简单git 存储库与标准的Pythonsetup.py install流程。如果你使用它,它也在 PyPI 中。

答案2

如果sshJumpstation 支持“-W”参数,您可以将其链接起来:

在笔记本电脑中~/.ssh/config

Host 10.144.108.127
    ProxyCommand ssh -q user@jumpstation -W %h:%p

在笔记本电脑的命令行中:

ssh -R PORT_WITH_INTERNET:localhost:PORT_WITH_INTERNET [email protected]

您还需要在笔记本电脑上运行代理并在远程计算机上设置适当的代理设置。

即使 Jumpstation ssh 不支持“-W”参数(我对此表示怀疑),也可以通过调用netcatJumpstation 甚至打开/dev/tcp/...和一对cat(如果那里有 bash)来规避这一点。

相关内容