我通过 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
,然后将端口从 转发noinet
到hasinet
。这可以通过一个命令巧妙地完成,如下所示(感谢@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]