Túnel SSH a través del servidor intermediario: ¿cómo conectarse en un solo paso (usando un par de claves)?

9

Mi pregunta es básicamente cómo convertir mis dos pasos existentes en uno solo.

Tengo un túnel SSH en funcionamiento configurado entre dos computadoras que usan un servidor intermediario como este:

Kubuntu_laptop--->nat_fw--->Debian_Server<--nat_fw<--Kubuntu_desktop

Lo que hago actualmente es SSH de Kubuntu_laptop a Debian_Server y luego de Debian_Server a Kubuntu_desktop. Me gustaría hacer ese único comando SSH, emitido en mi Kubuntu_laptop en bash que resulta en mi conexión al Kubuntu_desktop (shell / bash).

Los comandos que estoy usando ahora son los siguientes. Paso 1:

me@kubuntu_laptop:~$ ssh -i ~/.ssh/id_rsa admin@debian_server  

Paso 2:

admin@debian_server:$ ssh -p 1234 -i /home/admin/.ssh/id_rsa admin@localhost 

Luego estoy conectado a kubuntu_desktop a través de SSH (desde kubuntu_laptop).

Se requieren claves RSA para todas las conexiones SSH. El inicio de sesión con contraseña está desactivado por completo. Y observe que las cuentas de usuario de la computadora son diferentes en dos de las computadoras.

Con respecto a la conexión para esta pierna:

Debian_Server<--nat_fw<--Kubuntu_desktop

Así es como se establece:

autossh -M 5234 -N -f -R 1234:localhost:22 user@mydebian.com -p 22

Observe que Kubuntu_desktop se conecta a un intermediario como [email protected] (no admin @ debian_server). Pero cuando me conecto a Kubuntu_desktop, me conecto como usuario administrador.

No puedo cambiar el puerto de monitoreo existente (5234) o el número de puerto remoto (- R) (1234 en este ejemplo). No puedo cambiar la seguridad SSH para permitir el inicio de sesión con contraseña. No puedo abrir ningún puerto de firewall nuevo. No puedo cambiar las cuentas de usuario (excepto en la computadora portátil).

MountainX
fuente
Eche un vistazo a esta pregunta: unix.stackexchange.com/questions/82158/…
Hauke ​​Laging
@HaukeLaging: parece interesante pero no lo entiendo. ¿Qué es "nc"? ¿Y en qué máquina se edita ~ / .ssh / config? Básicamente, necesito más detalles de los que proporciona esa pregunta / respuesta. Gracias.
MountainX
Esta pregunta se ha cruzado (sin notificación) a Server Fault SE. ¡Esta es una forma MALA!
mdpc
gracias por los votos negativos en todas partes, pero ¿qué hay de malo en preguntar en dos lugares diferentes? ¿También vas a evitar que pregunte en ubuntuforums.org o en otro lugar?
MountainX
@ HaukeLaging: si uso ProxyCommand en mi computadora portátil ~ / .ssh / config, ¿qué debo ingresar para el nombre de host de Kubuntu_Desktop? No hay fqdn. Esto es SSH inverso. Gracias.
MountainX

Respuestas:

8

Asegúrese de que netcat esté instalado en el servidor Debian y utilícelo ProxyCommanden su configuración SSH local ( ~/.ssh/config).

Host Kubuntu_desktop
  ProxyCommand ssh Debian_Server nc localhost 1234
Ignacio Vazquez-Abrams
fuente
Di todos mis pasos en otra respuesta para completar, pero todo fue gracias a tu ayuda. Estoy aceptando tu respuesta. ¡¡¡Gracias!!!
MountainX
6

Gracias a @Ignacio Vazquez-Abrams, aquí están todos los pasos:

Asegúrese de que netcat esté instalado en el servidor Debian y use ProxyCommand en su configuración SSH local (~ / .ssh / config).

Edité config de la siguiente manera:

me@kubuntu_laptop:~/.ssh$ nano config

Los contenidos son:

Host kubuntu_desktop
  ProxyCommand ssh debian_server_fqdn nc localhost 1234
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Entonces solo conecta:

me@kubuntu_laptop:~$ ssh kubuntu_desktop

¡Conectado a kubuntu_desktop a través de SSH en 1 paso! Perfecto

Actualizar:

Esto lo hace más flexible:

me@kubuntu_laptop:~/.ssh$ nano config

Los nuevos contenidos son:

Host family_desktops
  ProxyCommand ssh debian_server_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Entonces solo conéctate con mamá:

me@kubuntu_laptop:~$ ssh family_desktops -p 1234

Y conéctate con papá:

me@kubuntu_laptop:~$ ssh family_desktops -p 5678

Por supuesto, mamá y papá tienen que configurar el Paso 0 (de mi pregunta original) donde cada uno tiene su propio puerto -R definido. Ejemplo para papá:

Paso 0 (para papá):

autossh -M 6543 -N -f -R 5678:localhost:22 user@mydebian.com -p 22

Opcional:

DAD=5678
ssh family_desktops -p $DAD
MountainX
fuente
El ProxyCommand también se puede escribir como: ProxyCommand ssh debian_server_fqdn -W localhost:%pasí que no es necesario tener netcat en el servidor Debian.
Kevin