我在通过 ssh 可访问的服务器访问互联网时遇到问题
情况
编辑:仅供参考,我的操作系统是 Ubuntu 16.04,IIRC,与服务器相同。
好的,事情是这样的。
- 我的公司为我提供了一台可以连接网络的 PC(通过代理),但网络上的某些资源受到限制(我既无法添加外部 PPA 或
apt-get update
手动添加后,也无法访问某些应用程序的某些下载部分,但仍然可以使用apt-get install
或安装包pip
)。 - 此外,我的(上述)PC 可以通过 ssh 连接访问我公司的一些服务器。其中一台服务器(故意)拥有不受限制的互联网访问权限(听起来很奇怪,但事实就是如此)。我问老板我是否能以某种方式让我的电脑通过该服务器不受限制地连接到互联网,他告诉我这是可能的,但他不知道怎么做。仅供参考,虽然他不鼓励我这样做,但我并没有被禁止。
我的问题
有什么方法可以实现我刚才描述的内容吗?从我的电脑,通过远程服务器(无限制访问互联网)访问(无限制)互联网
到目前为止我尝试过的
实际上,没有太多收获,因为我不知道如何搜索(很难想出一个关键词)这个问题。大多数时候我都尝试配置代理,这样我就可以(部分)解决问题(对于 PPA,我尝试添加到source.list
并添加标志,将代理条目添加到/etc/apt/apt.conf
,...)。宝宝仍然没有糖果。如果有人需要查看错误,请告诉我,但我想彻底解决问题 :(
我很感激任何建议。提前谢谢!
答案1
尝试 SSH 隧道/端口转发。互联网上有很多信息。请阅读此内容:SSH/OpenSSH/端口转发g和使用 Ubuntu 进行 SSH 隧道。
我喜欢使用 SSH socks-proxy。安装 plink:
sudo apt install plink
在本地计算机(SSH 客户端)中以受限的 Internet 访问运行命令:
plink -ssh 111.111.11.111 -C -N -l user -D 127.0.0.1:8081
其中111.111.11.111
- 具有不受限制访问的远程 SSH 服务器的 IP 地址和user
- 您的 SSH 服务器用户名。
就这些。现在您有了 SOCKS 代理 - 通过代理的所有流量都将被加密并通过您的远程 SSH 服务器路由。代理的设置如下:host 127.0.0.1
,port 8081
。
将此设置添加为 Ubuntu 系统范围的代理设置,并指示浏览器、bash 等使用系统代理。可以使用 Ubuntu 系统设置 GUI 添加系统代理(我的系统具有乌克兰语言环境):
如果你想使用 apt 的代理,请阅读为 APT 配置代理?,仅考虑您有 socks-proxy,因此代理 URL 应该是socks4://127.0.0.1:8081
或socks5://127.0.0.1:8081
而不是http://127.0.0.1:8081
,例如:
export http_proxy="socks4://127.0.0.1:8081"
答案2
使用 Socks 代理的两个步骤
Socks 代理允许使用代理计算机轻松访问互联网。在这种情况下,服务器可以不受限制地访问互联网。
步骤 1:为桌面设置 socks 代理
这可以在浏览器或系统级别完成。我们将在系统级别完成此操作,以便任何想要访问互联网的程序都将使用 socks 代理。我们将使用命令行执行此操作。
使用Ctrl++在您的桌面 Ubuntu 上打开一个终端并输入以下行:AltT
gsettings set org.gnome.system.proxy.socks host 'localhost'
gsettings set org.gnome.system.proxy.socks port 1080
gsettings set org.gnome.system.proxy mode 'manual'
这将通过 路由所有互联网流量localhost:1080
。
第 2 步:ssh
有几个选择
假设服务器有 IP 地址aaa.bbb.ccc.ddd
,并且您在该服务器上有一个名为 的用户帐户user007
。
在终端输入:
ssh [email protected]
如果成功,您就大功告成了。输入exit
以从服务器返回桌面。现在让我们使用一些选项再次执行此操作:
ssh -CD 1080 [email protected]
- 压缩
C
桌面和服务器之间传递的所有内容。 - 将
D 1080
本地端口 1080 绑定到服务器。
恢复正常
第一的,退出ssh
会话。如果您-N
在中添加选项,ssh
则必须使用Ctrl+ C。
第二,将代理更改为none
:
gsettings set org.gnome.system.proxy mode 'none'
如果您想要更高级一些,您可以将这些步骤组合成一个 bash 脚本,但这就可以完成工作了。
#!/bin/bash
gsettings set org.gnome.system.proxy.socks host 'localhost'
gsettings set org.gnome.system.proxy.socks port 1080
gsettings set org.gnome.system.proxy mode 'manual'
ssh -CD 1080 [email protected]
gsettings set org.gnome.system.proxy mode 'none'
echo "Finished with the Internet, now back to work..."
此脚本将设置 socks 代理,然后启动ssh
。当您退出 时ssh
,它将关闭代理。
希望这可以帮助
答案3
其他答案适用于配置中支持 SOCKS 的东西。当您要使用的工具不支持时,您可以socksify
从dante-client
包中使用。
ssh -fND 1080 $server
SOCKS_SERVER=127.0.0.1:1080 socksify git fetch
答案4
好的。我忘了这个问题。抱歉,我应该早点更新情况。
我尝试了上述一些建议。其中一个有效,其他的没有(一些我不记得的错误,可能是由于我的配置)。解决方案相当复杂(我必须谷歌一下才能让它真正起作用)。
一个更简单的解决方案
然后我的一位同事建议我使用sshuttle
,只需一个命令,我就得到了我需要的东西。我所要做的就是打开一个新终端,输入sshuttle -r username@serverIP 0.0.0.0/0
并享受整个互联网世界。有时它会返回错误,奇怪的是,只需重试就可以了