apt-get 通过隧道代理安装,但 ssh 仅来自客户端
Posted
技术标签:
【中文标题】apt-get 通过隧道代理安装,但 ssh 仅来自客户端【英文标题】:apt-get install via tunnel proxy but ssh only from client side 【发布时间】:2016-07-21 02:52:58 【问题描述】:所以...这是我的问题:
我可以从我的机器访问 ***。我可以通过 SSH 访问 *** 中的服务器,但由于防火墙阻止了反向 ssh 连接,这台机器无法从内向外访问。所以我不能通过隧道使用 Internet 来使用 apt-get。
我该如何模仿:
sudo ssh -D 9999 root@<machineoutside***>
但来自 *** 外部。 或者有什么方法可以使用 Internet 连接来安装包?
【问题讨论】:
我试过这个解决方案:superuser.com/questions/370930/ssh-reverse-socks-tunnel 使用命令 "ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"" 但它也不起作用跨度> 【参考方案1】:设置:
电脑A
可以上网 可以访问计算机 B SSH 已安装电脑B
无法访问互联网 OpenSSH 服务器已安装步骤:
ssh 到计算机 B 从计算机 A
sudo ssh -R <selected port>:us.archive.ubuntu.com:80 user@computerb.host
编辑计算机 B 的 /etc/apt/apt.conf
以包含以下行:
Acquire::http::Proxy "http://localhost:<selected port>";
Acquire::https::Proxy "https://localhost:<selected port>";
在计算机 B 上运行 apt-get update
或 install
或 upgrade
,它应该可以工作。
几点说明:
您必须在使用计算机 B 访问 apt-get 存储库时保持从计算机 A 到计算机 B 的 ssh 原始会话处于活动状态。 您不必使用相同的 ssh 连接来利用隧道(这意味着如果您有多个 ssh 连接到计算机 B,它们应该都可以工作)使用腻子
这也可以使用 Putty 来实现(假设计算机 A 是 Windows 机器)。
-
启动会话时,选择 SSH --> Tunnels
源端口:
<selected port>
目的地:us.archive.ubuntu.com:80
选择“远程”单选按钮
选择“添加”按钮
像往常一样配置会话。
按照上述步骤 2 和 3 进行操作
【讨论】:
谢谢!你救了我的命。它适用于官方存储库,但是......如果我需要额外的包或使用 python pip 怎么办。 我在计算机 A 中尝试过:ssh -R 8889:pypi.python.org:443 user@computerb.host 和计算机 B 中:sudo pip --proxy=localhost:8889 install一个选项是启用 SSH 隧道。这使您可以在另一个协议中运行 SSH 会话,此选项可以让您绕过防火墙,让防火墙误以为传入连接实际上是 http 端口 80 回复而不是端口 21。下面是一个示例,您可能需要微调随你喜欢。
ssh -L 9000:serverIpAddress:80 user@example.com
祝你好运!
【讨论】:
我试过了,但它不起作用,我认为所有的连接都是被禁止的。我可以使用命令“ssh -L 9000:serverIpAddress:80 user@example.com”从外部连接,但是当我在 tsocks 内的服务器中连接时不起作用。 (我之前在127.0.0.1和9000端口上配置了tsocks) 如果它是一个深度数据包检查防火墙,它会变得相当复杂。尝试找出您正在处理的防火墙类型。【参考方案3】:安装 proxychains 和 tmux:你可能会遇到这样的事情:
sudo ssh -R 8080:us.archive.ubuntu.com:80 user@computerb.host
echo 'Acquire::http::Proxy "http://localhost:8080";' | sudo tee /etc/apt/apt.conf.d/proxy.conf
apt-get update
apt-get install proxychains tmux
sudo rm /etc/apt/apt.conf.d/proxy.conf
注意到最后一行取消了 apt 代理配置吗?
拥有代理链和 tmux 后,您可以获得更可靠的操作,并且无需更改时髦的 apt 配置,并且 pip / curl 等也可以工作。
首先,启动 tmux。 (快速入门,使用CTRL-B
而不是另一个键,'c' 表示另一个新外壳,'n/p' 表示在外壳之间循环,'d' 分离并保持运行)。
tmux
接下来,我们将建立一个 ssh 连接,从隔离的计算机返回到任何可以通过 SSH 访问且可以访问互联网的计算机,我们称之为server
。
ssh -f -NT -M -S ~/.ssh/ssh_socket_for_proxychains -D 127.0.0.1:17471 server
这似乎什么也没做,因为它在后台运行。你可以用ps aux |grep ssh
左右看到它。
现在,配置/etc/proxychains.conf
:
sudo nano /etc/proxychains.conf
将最后一行从 socks4 127.0.0.1 9050
更改为 socks5 127.0.0.1 17471
。
最后,您现在可以运行 sudo proxychains apt upgrade -y
和 proxychains pip install ...
之类的东西而不会失败。
作为奖励,您可以分离 tmux 会话 (CTRL-b,d) 并稍后返回(ssh 重新进入,然后 tmux a
)。
对于 raspberrypi,如果您将“us.archive.ubuntu.com”更改为“archive.raspberrypi.org”,它会起作用,而对于随机 debian,您可能会遇到“ftp.us.debian.org”的运气
对我来说,用例是隔离静态 ip 网络上的 raspi 之类的东西,我有另一台服务器,它有两个网络连接(一个可以访问互联网,另一个连接到隔离的局域网),它不路由:它正在运行 trueNAS ,并且局域网处于隔离状态。 但它确实有我可以 ssh 进入的 opensshd,然后 ssh 到 pi。
在这种情况下,它的独立局域网 IP 地址是 pi 连接回的“服务器”。它的 pi 获得了 proxychains 和 tmux,然后可以通过 apt 进行更新。
ssh -R
部分归功于 James Mertz,但它仅适用于 http 流量,任何具有 https URL 的东西都会失败;它不适用于 pip:从一堆不同的随机服务器中获取东西。不过,用它来获取代理链已经足够了。
proxychains howto 部分来自https://yuzhangbit.github.io/tools/use-apt-get-behind-socks5-proxy/
【讨论】:
以上是关于apt-get 通过隧道代理安装,但 ssh 仅来自客户端的主要内容,如果未能解决你的问题,请参考以下文章
使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理
Gcloud SSH 隧道代理始终通过美国,甚至来自其他地区