通过 SSH 会话向远程计算机提供 Internet 服务?

通过 SSH 会话向远程计算机提供 Internet 服务?

我通过 SSH 连接到远程/主机(同一网络/LAN)的机器可以访问互联网,但主机却不能。

在主机上运行更新和安装软件包非常不方便,因为我必须在本地启动代理,然后配置远程计算机才能使用它。

所以我想知道是否有更简单的方法可以通过 SSH 或其他方式来完成此操作?

我意识到其中的复杂性,但很想知道。

通过 Emacs使用plink(如果重要的话)。

答案1

我们将可以访问互联网的机器hasinet和不能访问互联网的机器称为noinet

如果您可以建立 SSH 连接 noinet hasinet

您可以使用 OpenSSH 的内置 SOCKS 代理轻松完成此操作。此命令将在noinet侦听端口上设置 SOCKS 代理1080

noinet$ ssh -D 1080 hasinet

如果您只能建立 SSH 连接 noinet hasinet

您可以在 上运行 OpenSSH 的 SOCKS 代理hasinet,然后将端口从 转发noinethasinet。这可以通过一个命令巧妙地完成,如下所示(感谢@Patrick):

hasinet$ ssh -D 1080 localhost -t ssh -R 1080:localhost:1080 noinet

如何使用 SOCKS 代理

如何使用此代理将取决于应用程序。某些应用程序支持内置的 SOCKS 代理。如果是这种情况,您需要将应用程序配置为在localhost:1080.如果没有,您可以使用 proxychains 或 redsocks,正如 @sciurus 建议的那样。tsocks如果您只需要为某些命令提供网络访问,这是一个更轻量级的解决方案。

答案2

您可以使用-R具有 SOCKS4/5 行为的标志,这是内置的,不需要@smammy 提议的长命令:

[hasinet]$ ssh -R 1080 noinet

您可以使用代理,例如

[noinet]$ curl -x socks5h://127.0.0.1:1080 http://www.google.it

这是有效的,因为-R如果没有提供目标主机,该标志将回退到 SOCK4/5 代理。从男人 ssh:

       -R [bind_address:] port:host:hostport
       -R [bind_address:] port
              Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side.

              This works by allocating a socket to listen to either a TCP port or to a Unix socket on the remote side.  Whenever a connection is made to this port or Unix socket, the connection is forwarded over  the  secure  channel,
              and a connection is made from the local machine to either an explicit destination specified by host port hostport, or local_socket, or, if no explicit destination was specified, ssh will act as a SOCKS 4/5 proxy and for‐
              ward connections to the destinations requested by the remote SOCKS client.
              [snip]

答案3

以下是通过 SSH 执行此操作的方法:

在没有互联网接入的机器上,运行

ssh -D 8080 machine_with_internet_access

您可以更换8080任何未使用的端口号,

然后安装软件如代理链或者红袜队,将它们配置为连接到本地主机:8080,并运行需要通过它们访问互联网的软件。

相关内容