¿Cómo puedo usar SSH con un proxy SOCKS 5?

35

Tengo un proxy SOCKS5 configurado a través de PuTTY con el puerto 7777 configurado como puerto dinámico. Puedo usar firefox / filezilla / etc configurándolos para usar un proxy SOCKS con localhosty puerto 7777. Pero no puedo entender cómo ssh (a través de Cygwin) a un servidor remoto utilizando el puerto dinámico. es posible?

He intentado usar ProxyCommandel siguiente método.

  1. Crea ~/.ssh/configcon la siguiente línea:

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

El mensaje que recibo es ssh_exchange_identification: Connection closed by remote host

Lémur oxidado
fuente
1
Para hacer que un programa que no es compatible con SOCKS pase por SOCKS, puede usar el llamado proxifer; ver en.wikipedia.org/wiki/Comparison_of_proxifiers . En particular, recomiendo mi proxifer tun2socks de código abierto ( code.google.com/p/badvpn/wiki/tun2socks ).
Ambroz Bizjak
Gracias por el comentario Ambroz. Necesito que funcione en cygwin, y veo en la página de wikipedia sobre proxificadores que todos los que menciona no están implementados en cygwin o no son aplicables. ¿Hay alguna manera de hacer que un proxifier funcione en cygwin?
no lo necesita para soportar específicamente Cygwin. Los programas de Cygwin son al final solo programas de Windows, pero con una interfaz POSIX implementada como una biblioteca. Si un proxifier funciona en Windows, debería poder proxificar los programas Cygwin perfectamente.
Ambroz Bizjak

Respuestas:

31

Está utilizando 'connect' para HTTPS como su versión proxy, esto es de man nc:

-X proxy_version Solicita que nc use el protocolo especificado al hablar con el servidor proxy. Los protocolos admitidos son '' 4 '' (SOCKS v.4), '' 5 '' (SOCKS v.5) y 'connect' (proxy HTTPS). Si no se especifica el protocolo, se usa SOCKS versión 5.

Por lo tanto, debe usar lo siguiente para usar SOCKS 5:

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

O simplemente:

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

Espero que ayude.


fuente
Gracias Saman, eso funcionó! Además, gracias por la explicación, ayuda.
El ProxyCommanddebe ser la primera línea de su ~/.ssh/config', or else nested inside a specify sección Host`. No estoy seguro de por qué. No funciona si es la última línea en el~/.ssh/config
Aaron McDaid
@AaronMcDaid: From man ssh_config: "Para cada parámetro, se utilizará el primer valor obtenido". Por lo tanto ... la configuración global debe estar antes de cualquier Hostsección. La última línea de ~/.ssh/configes parte de la Hostsección final .
mpb
Vale la pena mencionar que netcat está en /bin/ncDebian y Ubuntu.
Según Lundberg,
11
ssh -o ProxyCommand='nc --proxy-type socks4 --proxy 127.0.0.1:9050 %h %p' user@host

fc19 x86_64, Ncat: Versión 6.25

usuario264910
fuente
solo curiosidad, ¿por qué proxy-type socks4?
sospechoso
2
¿Puedes agregar un poco más de explicación a esto para decir por qué es la solución?
ChrisF
1
@ChrisF es lo mismo que la solución aceptada, ¡pero es de una sola línea! No es necesario modificar ningún archivo de configuración.
j123b567
1
Este es el programa nmap ncat (viene a través apt install nmapde sistemas APT como Ubuntu y Debian), que es diferente de netcat (ya sea netcat-openbsd o netcat-tradicional de Hobbit).
Adam Katz
1
@suspectus relacionado con el comentario de @Adam Katz, proxy-typees socks4porque el ncatprograma nmap no soportó sock5 hasta más recientemente. De hecho, este es un problema incluso ahora (noviembre de 2017), ya que RHEL 7 / Centos 7 cambió al paquete nmap pero utilizó una versión anterior que no admite calcetines5
Randall
3

tsocks ( http://tsocks.sourceforge.net/ ) es un buen contenedor que utiliza LD_PRELOAD para hacer que cualquier programa use el proxy SOCKS de forma transparente:

tsocks ssh example.com

Simplemente funciona, recuerde configurar la IP del proxy SOCKS en /etc/tsocks.conf

neutrinos
fuente
es demasiado complejo tener un archivo de configuración
Jiang YD
1

Este siguiente comando servirá, solo para usar nc:

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

El valor predeterminado es proxy HTTP, hay un proxy HTTP ejecutándose en el puerto 7000.

Chinglin Wen
fuente