Comment utiliser SSH avec un proxy SOCKS 5?

28

J'ai un proxy SOCKS5 configuré via PuTTY avec le port 7777 configuré en tant que port dynamique. Je peux utiliser firefox / filezilla / etc en les configurant pour utiliser un proxy SOCKS avec localhost et port 7777. Mais je ne peux pas comprendre comment ssh (via Cygwin) sur un serveur distant en utilisant le port dynamique. Est-ce possible?

J'ai essayé d'utiliser ProxyCommand via la méthode suivante.

  1. Créer ~/.ssh/config avec la ligne suivante:

    ProxyCommand /usr/bin/nc -X connect -x 127.0.0.1:7777 %h %p
    
  2. Exécutez ssh -p22 user @ remotehost

Le message que je reçois est ssh_exchange_identification: Connection closed by remote host

Rusty Lemur
la source
1
Pour qu'un programme qui ne supporte pas SOCKS passe par SOCKS, vous pouvez utiliser un soi-disant proxy. voir en.wikipedia.org/wiki/Comparison_de_proxificateurs . En particulier, je recommande mon proxifier open source tun2socks ( code.google.com/p/badvpn/wiki/tun2socks ).
Ambroz Bizjak
Merci pour le commentaire Ambroz. J'ai besoin que cela fonctionne dans cygwin, et je vois sur la page wikipedia sur les mandataires que tous ceux qui sont mentionnés ne sont pas implémentés dans cygwin ou ne sont pas applicables. Existe-t-il un moyen de faire fonctionner un proxy dans cygwin?
vous n'en avez pas besoin pour soutenir spécifiquement Cygwin. Les programmes Cygwin ne sont finalement que des programmes Windows, mais avec une interface POSIX implémentée en tant que bibliothèque. Si un mandataire fonctionne sous Windows, il devrait être en mesure de procéder à la procuration des programmes Cygwin.
Ambroz Bizjak

Réponses:

27

Vous utilisez 'connect' pour HTTPS comme version de proxy, cela provient de man nc:

-X proxy_version Demande à nc d'utiliser le protocole spécifié lors d'une conversation avec le serveur proxy. Les protocoles pris en charge sont "4" (SOCKS v.4), "5" (SOCKS v.5) et "connect" (proxy HTTPS). Si le protocole n'est pas spécifié, la version 5 de SOCKS est utilisée.

Vous devriez donc utiliser ce qui suit pour utiliser SOCKS 5:

ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:7777 %h %p

Ou simplement:

ProxyCommand /usr/bin/nc -x 127.0.0.1:7777 %h %p

J'espère que ça aide.


la source
Merci Saman, ça a marché! Aussi, merci pour l'explication, ça aide.
le ProxyCommand doit être la première ligne de votre ~/.ssh/config', or else nested inside a specify Section de l'hôte. Je ne sais pas trop pourquoi. Cela ne fonctionne pas si c'est la dernière ligne du ~/.ssh/config
Aaron McDaid
@AaronMcDaid: De man ssh_config: "Pour chaque paramètre, la première valeur obtenue sera utilisée." Par conséquent ... les paramètres globaux doivent être avant tout Host sections. La dernière ligne de ~/.ssh/config fait partie de la finale Host section.
mpb
Il est à noter que netcat est en /bin/nc sur Debian et Ubuntu.
Per Lundberg
10
ssh -o ProxyCommand='nc --proxy-type socks4 --proxy 127.0.0.1:9050 %h %p' user@host

fc19 x86_64, Ncat: Version 6.25

user264910
la source
juste curieux - pourquoi proxy-type socks4?
suspectus
2
Pouvez-vous ajouter un peu plus d'explication à ceci Pourquoi c'est la solution.
ChrisF
1
@ChrisF c'est la même chose que la solution acceptée, mais c'est un one-liner! Pas besoin de modifier un fichier de configuration.
j123b567
1
C'est le nmap ncat programme (vient via apt install nmap sur les systèmes APT comme Ubuntu et Debian), ce qui diffère de netcat (que ce soit netcat-openbsd ou netcat-traditionnel de Hobbit).
Adam Katz
1
@suspectus lié au commentaire de @Adam Katz, le proxy-type est socks4 parce que le nmap ncat le programme n'a pas soutenu sock5 jusqu'à plus récemment. En effet, c'est un problème encore aujourd'hui (novembre 2017), RHEL 7 / Centos 7 étant passé au paquet nmap mais utilisant une version plus ancienne qui ne prend pas en charge socks5.
Randall
3

tsocks ( http://tsocks.sourceforge.net/ ) est un bon wrapper qui utilise LD_PRELOAD pour que tout programme utilise le proxy SOCKS de manière transparente:

tsocks ssh example.com

Ne fonctionne que pour vous, n'oubliez pas de configurer l'adresse IP du proxy SOCKS dans /etc/tsocks.conf

neutrinus
la source
c'est trop complexe d'avoir un fichier de configuration
Jiang YD
0

cette commande suivante fera, pour utiliser simplement nc.

ssh examplehost.com -o "ProxyCommand=nc --proxy localhost:7000 %h %p"

La valeur par défaut est un proxy http. Un proxy http est exécuté sur le port 7000.

Chinglin Wen
la source