¿Cómo funciona realmente ssh ProxyCommand?

8

Me siento cómodo con el uso de la función ProxyCommand de ssh y puedo usarlo para saltar a través de múltiples hosts de bastión para llegar al host final de manera eficiente. Pero parece que no puedo entender cómo funciona realmente en el backend.

Por ej. Tengo el siguiente archivo de configuración.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh [email protected] -W %h:%p"

Entiendo que para conectarse al host final, el ProxyCommand se ejecutará antes de realizar la conexión final.com. Pero todavía parece que no puedo entender el orden de las conexiones.

¿Y qué hace la opción -W %h:%p? Entiendo que es la función netcat y es similar a nc %h %p.

Entonces, hasta donde tengo entendido, aquí está la secuencia de operaciones. Por favor, hágamelo saber si estoy equivocado. Usaré el archivo de configuración especificado anteriormente en mi ejemplo.

  1. El usuario ingresa ssh final
  2. Se creó una conexión ssh a bastion.com.
  3. Se crea un túnel netcat desde bastion.com hasta el puerto 22 de final.com. El stdin de netcat está conectado al shell obtenido en la conexión a bastion.com.
  4. Así que ahora tenemos una conexión de nuestro sistema a final.com. La primera mitad de esta conexión es una conexión ssh de nuestro sistema a bastion.com. La segunda mitad de esta conexión es un túnel netcat desde bastion.com a final.com.
  5. El ssh finalcomando Now toma la conexión anterior como proxy y hace un túnel de sus datos a través de esta conexión existente.

Además, también me gustaría saber si esta técnica también se conoce como apilamiento ssh .

saltos de línea agregados

Naruto Uzumaki
fuente

Respuestas:

8

3) Se crea un túnel netcat desde bastion.com hasta el puerto 22 de final.com.

falso, no hay netcat.

1) El usuario ingresa ssh finalen localhost. Esto inicia el proceso ssh primario
2) El ssh primario crea un ssh secundario con E / S redirigida a tuberías
3) El ssh secundario crea una conexión a bastion.com.
4) El sshdproceso en bastion.com crea una conexión tcp a final.com:22
5) Se agrega un canal ssh a la conexión ssh existente entre localhost y bastion.com
6) El ssh primario escribe los datos del protocolo de enlace en la tubería, el ssh secundario lo lee desde la tubería, envía a través del canal ssh a sshd en bastion.com; sshd lo lee y lo escribe en el socket conectado a final.com. Del mismo modo, los datos se transmiten desde final.com a localhost

cuenca
fuente
Gracias por tu respuesta. ¿Esta técnica también se conoce como apilamiento ssh o no tiene nombre?
Naruto Uzumaki
2
¿Podría por favor citar una referencia? Por ejemplo, manual. spec ..
qweruiop