109 votes

Se connecter avec SSH à travers un proxy

Je n'ai aucune idée de ce que je fais ici, donc gardez cela à l'esprit si vous pouvez m'aider !

J'essaie de me connecter à mon serveur virtuel via un proxy mais je n'arrive pas à me connecter, ça reste bloqué. Je suppose que c'est parce que ça ne passe pas par notre proxy.

J'ai essayé exactement la même chose à la maison et ça fonctionne parfaitement. Je suis sur OSX en utilisant Terminal pour me connecter.

Est-ce que quelqu'un peut me conseiller sur la façon dont je peux passer par le proxy avec SSH ?

121voto

rogerdpack Points 12806

Voici comment faire la réponse de Richard Christensen en une seule ligne, aucune édition de fichier requise (remplacez les majuscules par vos propres paramètres, PROXYPORT est fréquemment 80) :

 ssh USER@FINAL_DEST -o "ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p"

Vous pouvez utiliser la même option -o... pour scp également, voir ma réponse sur superuser.


Si vous obtenez ceci sur OS X :

 nc: option non valide -- X
 Essayez 'nc --help' pour plus d'informations.

il se peut que vous utilisiez accidentellement la version de netcat de homebrew (vous pouvez le voir en faisant une commande which -a nc - /usr/bin/nc devrait être listé en premier). Si vous en avez deux alors une solution de contournement est de spécifier le chemin complet vers le nc que vous voulez, comme ProxyCommand=/usr/bin/nc ...


Pour CentOS nc a le même problème d'option non valide --X. connect-proxy est une alternative, facile à installer en utilisant yum et fonctionne --

ssh -o ProxyCommand="connect-proxy -S PROXYHOST:PROXYPORT %h %p" USER@FINAL_DEST

47voto

Si votre connexion proxy SSH doit être utilisée fréquemment, vous n'avez pas à les passer en paramètres à chaque fois. vous pouvez ajouter les lignes suivantes à ~/.ssh/config

Host foobar.example.com
    ProxyCommand          nc -X connect -x proxyhost:proxyport %h %p
    ServerAliveInterval   10

ensuite pour vous connecter utilisez

ssh foobar.example.com

Source ici

35voto

Maxim K. Points 111

J'utilise l'option ssh -o "ProxyCommand=nc -X 5 -x proxyhost:proxyport %h %p" pour me connecter via un proxy socks5 sur OSX.

22voto

shoaly Points 1758

Juste une remarque à @la réponse de rogerdpack : pour la plateforme Windows, il est vraiment difficile de trouver un nc.exe avec -X(http_proxy), cependant, j'ai trouvé que nc peut être remplacé par ncat, exemple complet comme suit :

Hôte github.com
     Nom de l'hôte github.com
         #ProxyCommand nc -X connect -x 127.0.0.1:1080 %h %p
         ProxyCommand ncat --proxy 127.0.0.1:1080 %h %p
     Utilisateur git
     Port 22
     Fichier d'identité D:\Users\Administrator\.ssh\github_key

et ncat avec --proxy peut fonctionner parfaitement.

9voto

Hamid Rohani Points 767

Pour Windows, les paramètres @shoaly n'ont pas complètement fonctionné pour moi. J'obtenais cette erreur:

NCAT DEBUG: Le proxy a renvoyé le code d'état 501.
Ncat : Le proxy a renvoyé le code d'état 501.
ssh_exchange_identification : Connexion fermée par l'hôte distant

Je voulais me connecter en SSH à un SERVEURDISTANT et le port SSH avait été fermé dans mon réseau. J'ai trouvé deux solutions mais la deuxième est meilleure.

  • Pour résoudre le problème en utilisant Ncat:

    1. J'ai téléchargé Tor Browser, l'ai lancé et attendu la connexion.
    2. J'ai obtenu Ncat à partir de la distribution de Nmap et ai extrait ncat.exe dans le répertoire actuel.
    3. SSH en utilisant Ncat comme ProxyCommand dans Git Bash avec l'ajout du paramètre --proxy-type socks4:

      ssh -o "ProxyCommand=./ncat --proxy-type socks4 --proxy 127.0.0.1:9150 %h %p" NOMUTILISATEUR@SERVEURDISTANT

      Notez que cette implémentation de Ncat ne supporte pas les socks5.

  • LA MEILLEURE SOLUTION:

    1. Faites l'étape précédente 1.
    2. SSH en utilisant connect.c comme ProxyCommand dans Git Bash:

      ssh -o "ProxyCommand=connect -a none -S 127.0.0.1:9150 %h %p"

      Notez que connect.c supporte les versions de socks 4/4a/5.

Pour utiliser le proxy dans les commandes git utilisant ssh (par exemple en utilisant GitHub) -- en supposant que vous avez installé Git Bash dans C:\Program Files\Git\ -- ouvrez ~/.ssh/config et ajoutez cette entrée:

host github.com
    user git
    hostname github.com
    port 22
    proxycommand "/c/Program Files/Git/mingw64/bin/connect.exe" -a none -S 127.0.0.1:9150 %h %p

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X