proxy http sobre ssh, no calcetines

30

La pregunta es simple, pero la respuesta no es:

ssh -D 8080 user@host

o

ssh -gCNf -D 8080 user@host

o

wathever with -D #

Necesito un tipo de proxy que pueda usar con la variable http_proxy, en un dispositivo integrado que no sea compatible con SOCKS.

¿Qué tengo que hacer?

behrooz
fuente
¿No debería ser ssh -D user@host:8080?
ngen
Lo he hecho con ssh hace un tiempo ... vnc a través de ssh. pero podría suponer que use squid (un proxy http) a través de ssh. No puedo recordar cómo lo hice en este momento. no es -D 'cos (como sabes -y mejor que yo) -D es SOCKS si no recuerdo mal.
barlop
@ngen: No. -Despecifica un puerto para abrir el túnel, no el puerto para conectarse. (Incluso el puerto de conexión se especifica como -p port, no :port, por razones de compatibilidad.)
Grawity

Respuestas:

33

Método 1: utilice un proxy HTTP que admita el uso de un SOCKS ascendente, por ejemplo, Polipo o Privoxy.

Primero establezca un -Dtúnel sobre SSH como siempre, luego configure el proxy HTTP para usar el túnel SSH - ejemplo de configuración de Polipo:

proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5

Finalmente, apunte la aplicación a Polipo usando http_proxy=localhost:8118.

Método 2: ejecute su programa dentro del torsockscontenedor (o el anterior tsocks), que representa todas las conexiones de forma transparente. Estaba destinado para su uso con Tor, pero funciona con cualquier servidor SOCKS, incluido ssh -D.

Método 3: configure un proxy HTTP en su servidor , luego úselo ssh -Lpara acceder a él.

Gravedad
fuente
Privoxy es la mejor solución. Muchas gracias.
Seyed Morteza
18

Todos los -Dresultados en un servidor SOCKS. Si su cliente no puede manejar CALCETINES, olvide -D.

Debe ejecutar un proxy HTTP en el host remoto y reenviarlo con -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host
ceving
fuente
2
Para que se ejecute un proxy, encontré "tinyproxy" súper simple y ya está configurado razonablemente de manera predeterminada. En el host remoto de Ubuntu / etc, simplemente "sudo apt-get install tinyproxy", y luego reenvíe al puerto 8888 como se indica arriba: "ssh -L8888: 127.0.0.1: 8888"
Jimbly
7

Tengo el mismo problema que quiero usar el proxy HTTP a través de SSH. Debido a que muchas aplicaciones solo admiten proxy HTTP, y el proxy HTTP es fácil de usar en el entorno de línea de comandos.

Aunque busqué en varias páginas pero no puedo encontrar una forma directa (puede ser encadenada con Polipo, Privoxy o tsocks) para hacer esto ...

Después de un día de trabajo, terminé una versión simple de Golang del proxy HTTP sobre SSH. Siéntase libre de jugar con él: mallory .

Actualmente solo admite la clave RSA (ubicada en $ HOME / .ssh / id_rsa) y la autorización de contraseña.

hostes la dirección del servidor SSH, portes 22si no se cambia por el administrador. El lado del servidor es solo nuestro viejo amigo sshdcon configuración cero.

mallory -engine=ssh -remote=ssh://host:port

o con nombre de usuario user

mallory -engine=ssh -remote=ssh://user@host:port

o con nombre de usuario usery contraseña1234

mallory -engine=ssh -remote=ssh://user:1234@host:port

Después de conectarse, un proxy HTTP servirá en localhost: 1315.

justmao945
fuente
4
ssh -L 8080:localhost:12345 user@host

Esto abrirá el puerto 8080 en la máquina local y reenviará todos los datos al puerto 12345 en localhost, como se ve desde la máquina remota.

lesmana
fuente
2
No olvide que también debe tener un proxy HTTP ejecutándose en el host remoto. El reenvío de puertos por sí solo no ayudará.
Jonathan
2

Ejecute Privoxy en el host remoto, luego conéctese a través de SSH a Privoxy usando la -Lopción:

-L [bind_address:] puerto: host: hostport
         Especifica que el puerto dado en el host local (cliente) debe ser
         reenviado al host y puerto dados en el lado remoto. Esta
         funciona asignando un socket para escuchar el puerto en el lado local,
         opcionalmente vinculado a la dirección de enlace especificada. Cada vez que un
         se realiza la conexión a este puerto, la conexión se reenvía
         el canal seguro, y se realiza una conexión al puerto host
         puerto host desde la máquina remota.

( fuente de la página de manual )

anónimo
fuente
1

También puedes usar sacacorchos (GPL)

Agregue lo siguiente a su .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p
aurelien
fuente
sacacorchos ejecuta ssh sobre un proxy http, no al revés que se solicita.
eMBee