Utilizo un comando ssh para iniciar sesión en un nodo remoto usando un nodo intermedio a través de proxyjump. Los nodos remotos e intermedios son servidores Linux y mi cliente es una Macbook. Este comando funciona y se ve así:
ssh -i .ssh/id_file -J user1@jump_node -A -D remote_port user2@remote_node
donde reemplazo jump_node y remoto_node con los nombres de host de los nodos intermedios y remotos, y puerto_remoto con el puerto sshd en nodo_remoto.
Mi primera y principal pregunta es: cómo convertir este comando en una sección de configuraciónque puedo poner en mi archivo .ssh/config? Miré la página de manual de ssh y no pude obtener las opciones de configuración correspondientes para -D
las -A
banderas (¿supongo ForwardAgent yes
que para -A
?). ¿Alguien podría explicar estas banderas y cómo crear una sección de configuración correcta a partir de este comando?
Mi otra pregunta es menos importante, pero me ayudaría a entender lo que está pasando aquí.Esta segunda pregunta trata sobre un error que recibo cuando emito un comando ligeramente diferente.
La mayoría de la documentación que leo en línea sugiere usar un comando como este:
ssh -i .ssh/id_file -J user1@jump_node user2@remote_node:remote_port
pero cuando intento este comando (con y sin bandera -A
), aparece el siguiente error:
channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
No pude entender qué significa este error y si tiene algunos consejos que podría utilizar.
Respuesta1
Verman 5 ssh_config
:
ForwardAgent yes
IdentityFile .ssh/id_file
Host jump_node
User user1
Host remote_node
ProxyJump jump_node
User user2
y simplemente corre ssh remote_node
.
Incluso puedes construir una cadena de esta manera, si también especificas (otro) ProxyJump
para el jump_node
también.
El segundo problema es que ssh user2@remote_node:remote_port
la sintaxis es incorrecta. El mensaje de error indica Name or service not known
, porque intentó (y falló) resolverlo remote_node:remote_port
como un nombre de host (sí, con dos puntos incrustados), no remote_node
como cabría esperar. Intente ejecutar lo mismo sin -J
, el mensaje de error será un poco más claro.
Interpretaría esto como un intento de especificar un puerto donde el servidor SSH escucha en el nodo remoto; para eso, use -p
el parámetro de línea de comando o Port
la opción de entrada de host en un archivo de configuración.
Además, esto no tiene nada en común con el -D
cambio de línea de comandos. Y su argumento no es un "puerto remoto". Más bien, ese interruptor hace algo completamente diferente, es decir, hace que el cliente SSHescucharen el puerto especificadoen la máquina localy acepte conexiones SOCKS, y el control remoto se utilizará como nodo de salida. Puedes, por ejemplo, configurarlo en el navegador local, para que acceda a Internet a través del túnel SSH y terceros (servidores web) vean tus conexiones como provenientes de la IP del host remoto; nadie verá su IP "real", excepto el servidor SSH (que, sin embargo, verá la dirección del servidor de salto en este caso). Para configuraresteen la configuración, usa DynamicForward
la opción en el archivo de configuración.