¿Es posible SSH a través del puerto 80?

19

Estoy detrás de un firewall de red que no me deja pasar por el puerto predeterminado. Por eso, no puedo enviar ninguna bzr ramas a mi repositorio. Me gustaría saber si es posible de alguna manera proxyizar el ssh a través del puerto 80 para que pueda empujar las ramas.

Escuché que sacacorchos te permite hacerlo, pero no estoy seguro de cómo hacerlo exactamente.

Si conoce algún servidor proxy que funcione y le permita hacer eso, hágalo.

    
pregunta jokerdino 24.02.2012 - 03:44

5 respuestas

17

Un buen cortafuegos corporativo inspeccionará el tráfico independientemente del puerto, por lo que cambiar el puerto podría no funcionar.

Si tiene control sobre el servidor y todavía quiere probarlo, puede cambiar el puerto sshd al puerto 80. Advertencia si tiene algo más ejecutándose en el puerto 80 (en el servidor) ¡Esto no funcionará y probablemente signifique que perderá por completo el acceso SSH al servidor!

Necesitarás editar /etc/ssh/sshd_config y cambiar Port a 80 . Luego ejecuta

sudo restart ssh

Y luego, conecta:

ssh user@host -p80

Su ruta bzr se vería así: bzr+ssh://host:80/path/

Otro método es usar WebDav. Esto debería rodear completamente el problema del firewall porque todo sucede en el Puerto 80, pero requerirá que esté ejecutando Apache y configure una serie de cosas:

  1. Obtenga WebDav instalado
  2. Mueva su rama al lugar correcto
  3. Utiliza el complemento bzr-webdav para conectarte

Una VPN podría ser una opción, pero si ssh está bloqueado, espero que también se excluya.

Tal vez solo quieras hablar con tus administradores de red. Tienes que hacer algo y te están deteniendo. Si tienen una razón para bloquear ssh , es probable que vean cualquier intento extremo de eludirlo de forma bastante negativa ...

En resumen, podría ser más seguro hablar con ellos.

    
respondido por el Oli 24.02.2012 - 13:05
15

SSH a través del proxy

Si el firewall lo permite, puede ejecutar ssh en cualquier puerto, pero eso requiere que el servidor ssh esté escuchando en ese puerto. Es poco probable que el puerto 80 funcione, porque la mayoría de los lugares que tienen firewalls analizan el tráfico en ese puerto y bloquean todo lo que no sea HTTP. Pero el puerto 443, que normalmente es el puerto HTTPS, a menudo funciona, porque SSH y HTTPS se parecen mucho al software de filtrado, por lo que su sesión SSH se verá como una sesión HTTPS. (Es posible distinguir HTTPS y SSH, por lo que esto no funcionará si el firewall es lo suficientemente sofisticado).

Si tiene control sobre el servidor, hágalo escuchar en el puerto 443 además de 22 (el puerto ssh normal). Puede configurar el puerto en /etc/ssh/sshd_config : agregar una línea

Port 443

además del Port 22 que ya debería estar allí. Tenga en cuenta que esto supone que el servidor ssh no es también un servidor HTTPS. Si es así, necesitarás encontrar otro puerto que el firewall te permita usar o encontrar otro servidor ssh (ver reenvío a continuación).

Si no necesita establecer un proxy web en su navegador web, puede intentar conectarse directamente:

ssh -p 443 myserver.example.com

Si eso funciona, defina un alias en su ~/.ssh/config :

Host myserver
HostName myserver.example.com
Port 443

Si necesita establecer un proxy web en su navegador web, dígale a ssh que pase por el proxy. Instala sacacorchos . Defina un alias como este en su ~/.ssh/config , donde http://proxy.acme.com:3128/ es el proxy que usa para HTTPS al exterior (reemplace por el nombre de host y el puerto adecuados):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p

SSH sobre SSH

Si puede acceder a alguna máquina externa mediante una de las técnicas anteriores pero no a la máquina que le interesa, utilícela para reenviar una conexión. Asumiendo que puede enviar ssh a una máquina llamada mygateway y quiere llegar al servidor SSH en mytarget , instale netcat-openbsd en mygateway (o, si no está ejecutando Ubuntu, asegúrese de que tenga el comando nc ). Pon esto en tu ~/.ssh/config :

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH a Apache

Si el host al que desea conectarse ya está ejecutando Apache y escuchando en el puerto 443, y usted tiene control sobre ese host, puede configurar este Apache para aceptar conexiones SSH y reenviarlas. Consulte Tunneling SSH over HTTP (S) .

    
respondido por el Gilles 27.02.2012 - 01:38
2

Si no tiene ningún control sobre el servidor para cambiar el puerto SSH al puerto 80 o si no puede SSH sobre el puerto 80 porque el firewall impide que transfiera tales datos a través del puerto 80, puede probar TOR.

TOR es una red enorme. Su computadora se conecta a otra computadora en algún lugar del mundo, esa computadora se conecta a otra hasta que llega al servidor SSH. Todo esto es amigable con los cortafuegos, ocurre en el puerto 443 (que su empresa no bloquea, o bien ... bueno, eso no es tan inteligente de ellos). Literalmente es solo un gran proxy o VPN, y está encriptado también. De esta forma, puede acceder a cualquier host en cualquier puerto (también SSH de un servidor en el puerto 22).

Eche un vistazo en línea en www.torproject.org .

    
respondido por el Robbietjuh 24.02.2012 - 14:29
2

Lo siento, tengo que hacer de abogado del diablo.

Sé que probablemente haya una razón para hacerlo, sin embargo, ¿por qué sus administradores de redes / cortafuegos no abrirán el puerto específico que está buscando? Desde el punto de vista de la seguridad, ¿quiere correr el riesgo de que la inspección web se pierda algo? Si está configurado para puentear el puerto 80 para el tráfico estándar, y te estás poniendo en peligro.

Estoy de acuerdo con algunas sugerencias anteriores, donde como punto a punto vpn puede ser una opción más segura. De nuevo, desde el punto de vista de la seguridad, me interesaría saber la razón por la que está pasando por alto las políticas de seguridad y por qué no puede poner su servidor en un dmz o una red troncal para acceder. Solo yo. Buena suerte.

    
respondido por el Solarfinder 22.10.2012 - 19:33
2

Acabo de leer una solución sofisticada aquí:

enlace

Puede SSH en el puerto 80 incluso si su servidor doméstico también ejecuta un servidor web en el puerto 80.

Suponiendo que el servidor doméstico ejecuta Apache. La idea consiste en habilitar mod_proxy en su servidor y luego restringirlo para que se conecte a localhost (proxy.conf):

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

Ahora puede hacer una solicitud de conexión HTTP al servidor local y el servidor web establecerá un túnel para usted, solo necesita asegurarse de que todo el tráfico pase por su proxy:

ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com

Asegúrate de que las conexiones de localhost a SSH no estén privilegiadas (para evitar que los desconocidos entren ...)

Esto debería funcionar si estás detrás de un enrutador que solo permite el acceso al puerto 80.

Si está detrás de un proxy (por lo tanto, debe configurar el proxy en su navegador para obtener la web), primero deberá establecer un túnel para su propio host y luego emitir otra solicitud CONNECT dentro de este túnel para llegar a su host . Esto es más sofisticado, necesitará usar 2 netcats para esto.

Todo es posible, pero hágalo bajo su propio riesgo ...

ACTUALIZACIÓN:

O simplemente, simplemente use una aplicación web que le proporcione SSH a través de un navegador. enlace

    
respondido por el Calmarius 29.04.2013 - 16:49

Lea otras preguntas en las etiquetas