我可以通过 ssh 访问服务器来运行一些实验,并且需要通过互联网下载一些软件包来执行这些实验。不幸的是,服务器没有连接到互联网,或者阻止了传出连接,我不确定。但如前所述,我可以通过 ssh 连接到机器或通过 scp 从本地机器传输文件。
有没有办法通过本地机器中继服务器的互联网连接,以便下载所需的软件包?我研究过 ssh 隧道,但由于经验不足,没有成功。
编辑:服务器系统是 Ubuntu 14.04.4 LTS,我的本地机器是 mac os x,但我有一个 Ubuntu 虚拟机。
答案1
你可以。我曾经遇到过类似的情况,我使用从服务器到客户端的 ssh 连接来设置 SOCKS 代理。你可以直接在标志的帮助下进行设置-D 端口号(例如 10001)从服务器到客户端建立 SSH 连接时。
(在服务器上,与客户端建立 SSH 连接并保持打开状态:)
ssh -D 10001客户
随后,您可以使用代理链在另一个终端中,允许程序通过新创建的 SOCKS 代理与外界建立 TCP 连接。proxychains 的配置非常简单,只需在 proxychains.conf 文件中添加一行即可:
socks5 127.0.0.1 10001
通知代理链如何访问代理服务器。之后,您可以按以下方式使用代理链,例如告诉 wget 使用代理:
代理链 wget地址
一旦关闭第一个连接,代理就不复存在。
您没有提到您是否能够从服务器直接连接到客户端(可能是由于防火墙设置而无法连接?)。如果是这种情况,您仍然可以使用此方法,尽管您可以先建立反向隧道:
(在客户端,与服务器建立 SSH 连接并建立反向隧道:)
ssh -R 9999:本地主机:22服务器
这将与服务器建立连接,并创建一个端口(本例中为 9999),该端口通过端口 22(默认 SSH 端口)连接回客户端。然后,在服务器上,您可以通过此隧道与客户端建立连接:
ssh-p 9999-D 10001本地主机
如果您不想完全设置 SOCKS 代理,那么您最好从服务器到客户端建立 SSH 连接,并且如果您只想访问特定服务器,则建立到目的地的本地隧道(使用 -L)。