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

20

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

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

Si conoce algún servidor proxy que funcione que le permita hacer eso, por favor, menciónelo.

jokerdino
fuente
2
man sshrevela puerto: host: hostport. Así que inténtalo más ssh 80:server.como menos.
MarkovCh1
Eso es para configurar un túnel a través de -L o -R. Entonces necesitarías otra caja para atravesarlo.
Cesio
1
Ver también unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

Respuestas:

19

Un buen firewall 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 aún desea 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 significará que está completamente perder el acceso SSH al servidor!

Tendrá que editar /etc/ssh/sshd_configy cambiar Porta 80. Entonces corre

sudo restart ssh

Y luego conecta:

ssh user@host -p80

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


Otro método es usar WebDav. Esto debería evitar el problema del firewall por completo porque todo sucede en el Puerto 80, pero requerirá que ejecute Apache y configure varias cosas:

  1. Instale WebDav
  2. Mueve tu rama al lugar correcto
  3. Use el complemento bzr-webdav para conectarse

Una VPN podría ser una opción, pero si sshestá bloqueada, esperaría que también se excluya.

Es posible que solo desee hablar con los administradores de su red. Necesitas 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 manera bastante negativa ...

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

Oli
fuente
77
+1 para discutir sus necesidades con su departamento de TI. En muchos entornos, incluido el mío, este tipo de actividad sería motivo de terminación.
Panther
1
Además, si va a hacer que el servidor ssh escuche en otro puerto, podría hacerlo escuchar en los puertos 22 y 80 al tener dos Portlíneas, con una para cada puerto en el /etc/ssh/sshd_configarchivo.
Azendale
Evitaré hacer una lista (la lista es larga y la discusión de algunos de sus elementos puede volverse muy política rápidamente), pero esta pregunta cubre muchas situaciones además de la de un empleado que busca eludir una política de la compañía que es implementada fielmente por El departamento de TI propio de la empresa. Estoy a favor de las personas que discuten sus necesidades de trabajo con TI, pero eso no siempre es aplicable, y a veces los departamentos de TI incluso responden: "Está bien, pero no estamos cambiando nada para acomodarlo". Por separado, es bastante plausible que el puerto 22 esté bloqueado por las VPN que no lo están, así que creo que vale la pena intentarlo.
Eliah Kagan
@Panther Entonces, algunas personas estarían aún más felices de poner fin a ese régimen corporativo.
NeverEndingQueue
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 escuche 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 del 22 (el puerto ssh normal). Puede configurar el puerto en /etc/ssh/sshd_config: agregar una línea

Port 443

Además del Port 22que 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á encontrar otro puerto que el firewall le permita usar o encontrar otro servidor ssh (consulte el reenvío a continuación).

Si no necesita configurar 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 configurar un proxy web en su navegador web, dígale a ssh que vaya a través del proxy. Instalar sacacorchos . Defina un alias como este en su ~/.ssh/config, dónde http://proxy.acme.com:3128/está el proxy que usa para HTTPS en el 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, úsela para reenviar una conexión. Asumiendo que puede ssh a una máquina llamada mygatewayy que desea alcanzar el servidor SSH en mytarget, instale netcat-OpenBSD en mygateway(o, si no se está ejecutando Ubuntu, asegúrese de que tiene el nccomando). 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 tiene control sobre ese host, puede configurar este Apache para aceptar conexiones SSH y reenviarlas. Ver Tunneling SSH sobre HTTP (S) .

Gilles 'SO- deja de ser malvado'
fuente
también puedes usar nc en lugar de sacacorchos para https, ¿sí? stackoverflow.com/a/15577758/32453
rogerdpack
3

Acabo de leer una solución sofisticada aquí:

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

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

Suponiendo que el servidor doméstico ejecuta Apache. La idea implica habilitar mod_proxy en su servidor, 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 localhost y el servidor web establecerá un túnel para usted, solo necesita asegurarse de que todo el tráfico pase a través de su proxy:

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

Asegúrese de que las conexiones de host local a SSH no tengan privilegios (para evitar que entren extraños ...)

Esto debería funcionar si está detrás de un enrutador que solo permite la salida del puerto 80.

Si está detrás de un proxy (por lo que necesita establecer un proxy en su navegador para obtener la web), primero deberá establecer un túnel para su propio host, 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 ...

ACTUALIZAR:

O simplemente, use una aplicación web que le brinde SSH a través de un navegador. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
fuente
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 le impide transferir dichos 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 el firewall, sucede en el puerto 443 (que su empresa no bloquea, o bien ... bueno, eso no es tan inteligente de su parte). Literalmente es solo un gran proxy o VPN, y también está encriptado. De esta manera, puede acceder a cualquier host en cualquier puerto (también SSH de un servidor en el puerto 22).

Míralo en línea en www.torproject.org .

Robbietjuh
fuente
2

Lo siento, tengo que hacer de abogado del diablo.

Sé que probablemente hay una razón para hacerlo, sin embargo, ¿por qué los administradores de redes / firewall no abren el puerto específico que está buscando? Desde el punto de vista de la seguridad, ¿quiere arriesgarse a que la inspección web pierda algo? Si está configurado para pasar por alto 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. Nuevamente, desde el punto de vista de la seguridad, me interesaría saber la razón por la que realmente está pasando por alto las políticas de seguridad y por qué no puede colocar su servidor en un dmz o en la red troncal para acceder. Solo yo. Buena suerte.

Buscador solar
fuente
2
No siempre es posible hablar con los administradores de la red, y los administradores de la red no siempre son razonables.
Jeremy Bicha
Por ejemplo, si está sentado en un café, conectado a WiFi, pero el acceso restringido por el administrador (y aún necesita conectarse ahora).
old-ufo