我租用了一台服务器,但不允许我访问某个 URL。我可以使用家用电脑作为 SSH 隧道桥接器从服务器访问该 URL 吗?在服务器中,我只能访问命令行。
我可以访问一些 URL,但这些 URL 不在白名单中。这是我得到的结果。
wget https://jenkins-ci.org/debian/jenkins-ci.org.key
--2015-03-30 13:21:20-- https://jenkins-ci.org/debian/jenkins-ci.org.key
Resolving jenkins-ci.org... 199.193.196.24
Connecting to jenkins-ci.org|199.193.196.24|:443... failed: Connection timed out.
Retrying.
我想使用 SSH 隧道或类似的东西来下载密钥文件和服务器上的软件包。
答案1
根据您后来的一条评论,重新表述您的问题,您想要
使用没有开放端口的个人计算机作为隧道从无法访问该 URL 的服务器访问 [网站] - Helio
乍一看,你的要求似乎是不可能的。仔细检查后,你需要的是一些非常先进的网络巫术。具体来说:
- 在您的个人计算机上运行的 VPN 服务器(我们称之为 herpyderp)
- 在远程服务器上运行的 SSH 服务器(称之为.... megatron。为什么不呢?)
- megatron 上的 VPN 客户端。
设置 VPN 服务器
设置 VPN 服务器的过程……相当复杂,远远超出了本回答的范围。我会在最后为你提供一些资源链接。
无论如何,将其设置为监听127.0.0.1
,并禁用推送默认路由。(您可能还需要将其设置为使用 tcp;我不确定 udp 在这种奇怪的情况下会如何反应。)
通过 SSH 转发端口
为了简单起见,我假设你在 herpyderp 上有一个 OpenVPN 服务器,并且正确设置了它并监听了127.0.0.1:1194
。连接到 megatron 并将适当的端口转发回 herpyderp (在 上localhost
):
ssh -R 8088:localhost:1194 awesomeuser@megatron
连接 VPN
再次,为了简单起见,我假设您在 上有一个 OpenVPN 客户端的配置文件megatron
。确保它配置为不是设置默认路由,并连接到地址为的服务器127.0.0.1:8088
。
请注意,如果megatron
已经在 8088 上监听某些内容,则需要使用其他端口号。
添加路线
最后,您需要使用命令通过 VPN 将请求路由到被阻止的 IP ip route add
。使用ifconfig
获取 VPN 适配器的 IP 地址及其目标地址。使用ping
或nslookup
获取相关站点的 IP 地址。然后,根据此信息添加路由:
ip route add <SITE_IP_ADDR> via <VPN_DEST_ADDR> dev <VPN_ADAPTER>
如果一切顺利正好,您应该能够megatron
通过herpyderp
的互联网连接访问被阻止的 IP。
但...
话虽如此,我敢肯定,任何看到这个问题的网络管理员现在要么哭泣,要么震惊。这种设置没有任何...好处...。我觉得我甚至因为提出这个建议而犯了罪。
另外,我并不期望有任何显著的吞吐量。而且只是……天文数字般的延迟。
最后免责声明:我不知道这是否会实际上可以工作。应该可以,但由于此设置涉及大量工作,我还没有实际测试过。大约有一百万个可能出错的地方。祝你好运,一路顺风。
资源
- 这OpenVPN设置指南
- OpenSSH转发端口
- 知识产权手册页
编辑:提醒一下
这绝对有可能使您的服务器完全无法通过网络访问。ip
尤其是命令;错误的路由可能会阻止所有网络活动。
答案2
从你的家用机器运行以下命令:
curl https://jenkins-ci.org/debian/jenkins-ci.org.key|ssh <username>@<ssh server> 'cat > jenkins-ci.org.key'
<username>@<ssh server>
用适当的 ssh 信息替换。
Example: curl https://jenkins-ci.org/debian/jenkins-ci.org.key|ssh [email protected] 'cat > jenkins-ci.org.key'
这会将文件放置在用户主目录中。您可以更改此设置,也可以在复制后直接移动它。
假设您的家用机器使用 Linux。如果不是,您可以使用便宜/免费的云 Linux 机器来执行相同操作(例如:c9.io)。
答案3
您可以尝试使用 SSH 隧道:
ssh -f user@yourserver -L 2000:jenkins-ci.org:443 -N
然后你就可以查询localhost:2000
你想要的内容:
wget https://localhost:2000/debian/jenkins-ci.org.key
如果遇到域问题,只需添加:
127.0.0.1 jenkins-ci.org
到/etc/hosts
文件并运行:
wget https://jenkins-ci.org:2000/debian/jenkins-ci.org.key
这有点“黑客”,但我认为这就是你想要的。