如何使用SSH“动态转发”(-D)在VPN后面的盒子上适当地获取更新/安装?可能吗?


2

我在VPN后面被监禁了一个ubuntu服务器盒。网关以某种方式修补了证书,因此我所有的https连接都显示为“失败”

$ curl https://www.google.com
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html

我的ca证书已更新。那不是问题。

我需要设置一个可以处理https的临时代理来更新该框。

我试图做一个ssh -D 8080 user@my_home_pc隧道。Netstat报告端口打开:

$ netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN <---
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

APT使用https_proxy环境变量。Sudo的-E选项保留环境变量。

$ https_proxy=https://localhost:8080 sudo -E apt-get update
Ign https://get.docker.com docker InRelease
Ign https://get.docker.com docker Release.gpg
Ign https://get.docker.com docker Release
Ign https://get.docker.com docker/main i386 Packages/DiffIndex
Ign https://get.docker.com docker/main Translation-en
Err https://get.docker.com docker/main i386 Packages  <----
  Proxy CONNECT aborted                               <----

您将如何设置ssh隧道传输的代理?考虑到我只能通过ssh到达外部(除了unusefull网关之外)。谢谢。

编辑:在我的家庭电脑上,AllowTcpForwarding设置为是

# /etc/ssh/sshd_config
AllowTcpForwarding yes

Answers:


1

此答案不被认为是答案,但可以解决。

不是最终的,而是一种解决方法。

在这种情况下,无法访问的站点是https://get.docker.com

做法:

  1. 伪造get.docker.com的IP
  2. SSH隧道出并从外部将端口链接到get.docker.com。

程序:

  1. 将get.docker.com添加到/ etc / hosts

    cat "127.0.0.1  get.docker.com" >> /etc/hosts
    
  2. SSH输出到未装箱的盒子并转发。它必须使用sudo完成,因为我们将转发低于1024的端口。

    sudo ssh -L 443:get.docker.com:443 user@myhomepc
    
  3. 在另一个终端上,照常安装所有内容。

哦,记住完成后要擦除/ etc / hosts上添加的行。


详细说明您的解决方案,但要问您一个问题,因此apt-get尝试连接到get.docker.com:443最终先连接到127.0.0.1:443,然后再连接到未连接端口的机器,该机器正确连接即可获得。 docker.com:443,因此ssh在tcp重新映射中变得像透明代理一样。但是,如果他有apt-get想要访问的其他站点怎么办?是否有可以对此进行排序的SSH -D表单或某些解决方法?
barlop

@barlop:不。。。单独使用SSH -D,就像袜子连接一样,如问题所示,它只是中止了。我猜是因为https(ssl)强制执行无中间人的连接,但是...这引发了另一个问题。https代理如何工作。好吧,这可能会造成问题的扩大。
卡洛斯·特隆科索

我知道SSH -D的作用。解决方法的问题是,它仅适用于一个站点,或者n个隧道适用于n个站点,但是他必须知道哪些站点,或者他必须创建多个隧道,而且我可能不知道有20个站点。因此,有没有什么可以想到的解决方案,比如说没有SSH -D,它可以在任何站点上运行。(除了一个未编写的程序,以查看apt-get主机想要解决的问题,并为其创建所有隧道和127.0.0.1条目)
barlop 2015年

他在ssh -D上遇到的问题是本地问题。而他的问题是本地问题。我不了解关于MITM的其他问题吗?我认为也许http / https代理可以工作..但是-D和-R不存在。因此,如果他在远程计算机上执行SSH -D,然后在本地计算机上执行SSH -L转发至该计算机。然后(没有主机文件),他需要获得apt-get才能使用将转发到代理的本地ip:port。
barlop 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.