¿Cómo enviar ssh a un servidor al que no puedo acceder directamente?

¿Cómo enviar ssh a un servidor al que no puedo acceder directamente?

Contexto

Estoy ejecutando Ubuntu Desktop como mi máquina principal, a la que llamaré D. Quiero conectarme al servidor S a través de ssh, pero el firewall me está bloqueando.

Tengo acceso al servidor S, a través de un camino muy engorroso, que involucra una máquina virtual de Windows yMasilla. Esto hace que trabajar con este servidor sea extremadamente molesto: entorno completamente diferente, copiar/pegar no funciona, no puedo usar correctamente mi escritorio mientras estoy conectado a él (la máquina virtual interrumpe Alt-Tab), etc.

He verificado que puedo enviar ssh desde el servidor S a mi máquina de escritorio D (lo contrario de lo que necesito).

¿Podría de alguna manera iniciar el "reenvío de puertos" o algo similar desde el servidor, para poder acceder al servidor mediante ssh desde mi escritorio?

Respuesta1

Puede utilizar el siguiente comando para configurar un túnel SSH desde el servidor remoto a su máquina local:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Cuando el túnel esté configurado, simplemente puede enviar ssh a su servidor remoto usando el siguiente comando:

$ ssh -p 1234 user@localhost

Tenga en cuenta que necesita configurar claves ssh para el inicio de sesión automático (sin solicitud de contraseña). Si desea crear el túnel SSH de forma interactiva, puede eliminar las opciones -f -N. Para más información, man ssh.

Respuesta2

Si está ejecutando una versión más reciente de OpenSSH (7.3+), puede usarProxyJumpque hornea todo junto mágicamente:

ssh -J windows_machine remote_server

Que en tu ~/.ssh/configparece:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpadmite la sintaxis SSH completa, por lo que si está jimactivado windows_servery usa el puerto 2222para ssh. remote_serverestá en la IP 192.168.0.110desde windows_serverentonces puedes escribir:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

Yaúnsolo corre ssh remote_serverpara llegar allí.


Si está ejecutando una versión anterior de SSH, useComando proxy- esto le permite indicarle a SSH que primero ejecute un comando para establecer una conexión proxy, antes de ejecutar el comando SSH real.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Esto usa el SSH-Wopción, que es una abreviatura de lo más arcanosintaxis netcat.

Tenga en cuenta que, como cuando ejecuta, ssh remote_serverahora está en el, windows_machinedebe asegurarse de utilizar la IP delremove_server desde la caja de saltoen lugar de la IP de su máquina; es posible que sean iguales.

Luego puede agregar esta directiva a su ~/.ssh/configarchivo:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Esto significa que siremote_server esuna máquina diferente como se ve desde windows_machineentonces, puede ponerla en la configuración y seguir usándola ssh remote_server.

Respuesta3

En lugar de intentar eludir las cosas y crear una ruta complicada, ¿no puede simplemente solicitar que se permita SSH desde su escritorio al servidor? Si lo necesita y debería acceder al servidor, no veo por qué se rechaza la solicitud.

información relacionada