Usar un proxy HTTP para conectar por SSH usando un túnel

Introducción

Muchas veces, desde universidades, trabajos, bibliotecas, etc. nos encontramos con que las redes tienen abierto sólo el puerto 80 (web). Esto es especialmente molesto si desde el trabajo hemos de administrar una máquina externa por SSH y no nos deja conectar.

Bien, pues existe una solución: meter las conexiones SSH por un túnel HTTP usando un proxy externo.

Esta solución es específica de UNIX / Linux, pero funciona en Cygwin y es posible que haya algo parecido para Windows.

Podemos usar una herramienta realmente pequeña llamada corkscrew (realmente no me gusta nada el nombre...) para meter las conexiones por un túnel. Esta herramienta está para descargar en su web, funciona en casi cualquier UNIX y en cygwin y está en el portage de Gentoo, marcada como testing (net-misc/corkscrew-2.0: ~amd64 ~ppc ~sparc ~x86).

Una vez instalada deberemos configurar SSH para que use el proxy. Tenemos dos alternativas y podemos combinalas:
  • PROXY para TODAS las conexiones.
  • PROXY para cada host de destino.
  • PROXY genérico con excepciones


PROXY para TODAS las conexiones.

Deberemos editar el archivo:
~/.ssh/config

y poner la siguiente línea:

Host * ProxyCommand corkscrew IP_PROXY PUERTO_PROXY %h %p

PROXY para cada host de destino.


Deberemos editar el archivo:
~/.ssh/config

y poner la siguiente línea:

Host SERVIDOR_A_CONECTAR ProxyCommand corkscrew IP_PROXY PUERTO_PROXY %h %p


PROXY genérico con excepciones


Deberemos editar el archivo:
~/.ssh/config

y poner las siguientes líneas:

Host SERVIDOR_A_CONECTAR_ESPECIAL ProxyCommand corkscrew IP_PROXY_ESPECIAL PUERTO_PROXY_ESPECIAL %h %p
Host * ProxyCommand corkscrew IP_PROXY PUERTO_PROXY_DEFECTO %h %p

Podemos repetir la 1a línea tantas veces como necesitemos.





Listado de servidores PROXY

Hay varias páginas con listados de PROXYs. A mí me ha ido bien éste listado de PROXYs. Tenéis que escoger uno que funcione en el puerto 80 y sea anónimo, para no complicarnos mas la vida. Cuidado que en la parte de abajo de la página hay un CAPCHA, si no lo rellenáis no sale el listado.


Conectando a SSH a través del proxy

Ahora sólo necesitamos lanazar el SSH habitual para que podamos conectar. Así de sencillo.


CONSEJO: Excesivos cortes de conexión:

Si la conexión se os corta demasiado a menudo podéis intentar mantenerla mas estable usando un KeepAlive. Basta con añadir al archivo:
~/.ssh/config

La siguiente línea al princicio del todo:
ServerAliveInterval 60



Extra: Proxy con autentificación


Podemos usar PROXYs con autentificación. Para ello, basta con crear un archivo de usuario:contraseña, por ejemplo:
~/.ssh/proxyauth

y poner usuario y contraseña con el formato:
USUARIO:CONTRASEÑA
Además, editaremos el archivo de configuración:
~/.ssh/config

y, al final de cada línea de configuración de servidores añadiremos la ruta al archivo de autentificación:

~/.ssh/proxyauth

Por ejemplo, para un PROXY para todas las conexiones:
Host * ProxyCommand corkscrew IP_PROXY PUERTO_PROXY %h %p ~/.ssh/proxyauth



FINAL: Ejemplo completo

Un ejemplo de configuración completo, con un PROXY por defecto y dos  especiales, además de KeepAlive y un servidor con autentificación:

~/.ssh/proxyauth
USUARIO:CONTRASEÑA


~/.ssh/config
ServerAliveInterval 60
Host HOST1 ProxyCommand corkscrew PROXY_1_AUTH PUERTO_1 %h %p ~/.ssh/proxyauth
Host HOST2 ProxyCommand corkscrew PROXY_2 PUERTO_2 %h %p
Host * ProxyCommand corkscrew PROXY_3 PUERTO_3 %h %p




Edit: proxyauth en carpeta .ssh


    Editado por Daniel el 04/02/2009 a las 05:55:19h.