Comment utiliser le «transfert dynamique» (-D) SSH pour mettre à jour / installer apt-get sur une boîte derrière un VPN? C'est possible?

1

J'ai un serveur Ubuntu emprisonné derrière un VPN. La passerelle corrige en quelque sorte les certificats, de sorte que toutes mes connexions https s'affichent comme "en échec"

$ 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

Mes certificats de CA sont mis à jour. Ce n'est pas le problème.

Je dois mettre en place un proxy temporaire capable de gérer https pour mettre à jour la boîte.

J'ai essayé de faire un ssh -D 8080 user@my_home_pc creuser un tunnel. Netstat indique que le port est ouvert:

$ 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 utilise https_proxy variable d'environnement. L'option -E de Sudo préserve les variables env.

$ 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                               <----

Que feriez-vous pour mettre en place un proxy tunnelisé par ssh? Considérez que je ne peux accéder à l’extérieur que par SSH (en plus de la passerelle inutilisable). THX.

Edit: AllowTcpForwarding a la valeur yes sur mon homepc

# /etc/ssh/sshd_config
AllowTcpForwarding yes
Carlos Troncoso
la source

Réponses:

1

CETTE REPONSE N'EST PAS CONSIDEREE COMME UNE REPONSE, MAIS UN CONTOURNEMENT.

Pas final, mais une solution de contournement.

Dans ce cas, le site inaccessible est https://get.docker.com

Approche:

  1. Faux l'adresse IP de get.docker.com
  2. Sortie de tunnel SSH et liaison d’un port vers get.docker.com de l’extérieur.

Procédure:

  1. Ajoutez get.docker.com à / etc / hosts

    cat "127.0.0.1  get.docker.com" >> /etc/hosts
    
  2. SSH à la boîte non en cage et transmettre Il faut faire avec sudo comme nous allons transférer un port en dessous de 1024.

    sudo ssh -L 443:get.docker.com:443 user@myhomepc
    
  3. Sur un autre terminal, installez tout comme d'habitude.

Oh, et n'oubliez pas d'effacer la ligne ajoutée sur / etc / hosts lorsque vous avez terminé.

Carlos Troncoso
la source
pour élaborer sur votre solution, mais ensuite pour vous poser une question, alors apt-get essaie de se connecter à get.docker.com:443 et se connecte ensuite à 127.0.0.1:443, puis à la machine non mise en cache, qui se connecte correctement pour obtenir. docker.com:443 donc ssh devient plutôt comme un proxy transparent dans son remappage tcp .. intéressant. Mais que se passe-t-il s'il a différents sites auxquels apt-get veut accéder? Existe-t-il un formulaire SSH -D permettant de résoudre ce problème ou une solution de contournement?
barlop
@barlop: Nope ... SSH -D seul, en quelque sorte, se comporte comme une connexion de chaussettes et, comme le montre la question, il ne fait qu'abandonner. Je suppose que https (ssl) impose une connexion interdite, mais ... eh bien, cela soulève une autre question. Comment fonctionne un proxy https. Eh bien, cela pourrait créer une bulle de questions en expansion.
Carlos Troncoso
Je suis conscient de ce que fait SSH -D. Le problème avec votre solution de contournement est que cela ne fonctionne que pour un site ou n tunnels fonctionnent pour n sites mais il doit savoir quels sites ou il doit créer de nombreux tunnels et il se peut que je ne sache pas, 20 sites. Alors, y a-t-il une solution à laquelle vous pouvez penser, disons sans SSH -D, qui fonctionne pour n’importe quel site. (à côté d'un programme non écrit pour voir quel hôte apt-get veut ou voudrait résoudre, et créer tous les tunnels et 127.0.0.1 entrées pour eux)
barlop
Le problème qu'il a avec ssh -D est que c'est local .. et son problème est local. Je ne comprends pas l’autre problème avec MITM? Je pense que peut-être un proxy http / https fonctionnerait .. mais il n'y a pas de -R avec -D. Alors peut-être que s'il utilise SSH-D sur l'ordinateur distant, puis sur l'ordinateur local, le transfert SSH -L y est transféré. Ensuite (pas de fichier hosts), il doit faire en sorte qu'apt-get utilise cet ip: port local qui sera transféré au proxy.
barlop