Conecta a su servidor SSH a través de un proxy HTTP mediante corkscrew

corkscrew es una herramienta que se creó hace ya bastantes años pero que todavía sigue siendo bastante útil para tunelizar conexiones TCP a través de un proxy HTTP que admite el método CONNECT. Lee stdin y escribe en stdout durante la conexión, como hace netcat.

Usando SSH a través de un proxy HTTP

Se suele utilizar sobretodo para conectarse a un servidor SSH a través de un proxy HTTP/Socks. Para hacerlo, basta configurar el cliente ssh para usar el proxy de turno con corkscrew.

Primero editamos el fichero ~/.ssh/config y añadimos:
ProxyCommand /usr/local/bin/corkscrew IP_PROXY 3128 %h %p

Sintaxis: corkscrew $proxy_ip_or_domain_name $proxy_port $destination_ip_or_domain_name $destination_port

Y a continuación ya podemos conectarnos al servidor ssh de forma transparente:

ssh username@anyexternalcomputer

También podemos ejecutarlo con una única línea:

ssh user@server -o "ProxyCommand corkscrew IP_PROXY 3128 %h %p"

Si el proxy HTTP usa autenticación, deberemos editar un fichero 'auth-file':

$ gedit .corkscrew-auth

y dentro pondremos el nombre de usuario y la contraseña en el siguiente formato:

username:password

En ese caso debemos especificar el fichero con las credenciales en la configuración ssh:
Host *
ProxyCommand corkscrew proxyhostname proxyport %h %p /home/username/.corkscrew-auth 

Túnel SOCKS

Si queremos hacer un túnel SOCKS podremos ejecutar lo siguiente:
ssh -ND 9000 user@server -o "ProxyCommand corkscrew IP_PROXY 8088 %h %p"

que creará un proxy SOCKS en localhost:9000.

Tunneling Git

Los firewalls generalmente bloquean el puerto que usa git. Sin embargo, se puede hacer que git realice un túnel a través de proxies HTTP usando utilidades como corkscrew. Cuando git ve la variable de entorno GIT_PROXY_COMMAND establecida, ejecutará el comando en $GIT_PROXY_COMMAND y usará el stdin y stdout de ese programa, en lugar de un socket de red.

Creamos el script corkscrewtunnel.sh
#! /bin/bash
corkscrew proxyhost proxyport $*
Set GIT_PROXY_COMMAND
export GIT_PROXY_COMMAND=path-to-corkscrewtunnel.sh

Ahora, deberíamos poder usar git también a través del proxy HTTP.

Fuentes:

- CorkScrew - A Tool for Tunnelling SSH over HTTP Proxies etc. 
- How to use SSH Via HTTP Proxy using Corkscrew in Ubuntu
- Using corkscrew and an HTTP proxy to ssh anywhere through firewalls
- HTTP tunneling

2 comentarios :

  1. ¡Qué bueno! No lo conocía, y eso que se encuentra en los repositorios de Debian.
    Mis dieses.

    ResponderEliminar
  2. Usando netcat se puede hacer lo mismo, me parece.
    Saludos. Verónica.

    ResponderEliminar