![Cómo configurar una conexión SSH usando un nombre de host variable proporcionado por el servidor Jump](https://rvso.com/image/789293/C%C3%B3mo%20configurar%20una%20conexi%C3%B3n%20SSH%20usando%20un%20nombre%20de%20host%20variable%20proporcionado%20por%20el%20servidor%20Jump.png)
Quiero crear un archivo .sshconfig para el caso en el que necesito conectarme a un nodo de inicio de sesión (el servidor de salto), obtener el nombre de host de ese nodo ejecutando un comando y luego hacer ssh a ese nombre de host usando el mismo nombre de usuario y credenciales. utilizado para el nodo de inicio de sesión. Esta es la configuración con la que terminé:
Host jump-server
HostName loginnode
User user
Host remote
User user
IdentityFile C:\Users\user\.ssh\id_rsa
ForwardX11 yes
ForwardX11Trusted yes
XAuthLocation /usr/bin/xauth
ProxyCommand ssh -q jump-server "ssh user@`command_to_get_the_hostname` bash -l"
Estoy intentando hacer ssh usando este comando:
ssh.exe -v remote
Y obtengo este resultado:
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug1: Reading configuration data C:\\Users\\user/.ssh/config
debug1: C:\\Users\\user/.ssh/config line 14: Applying options for remote
debug1: Executing proxy command: exec ssh -q jump-server "ssh lemoni15@`command_to_get_the_hostname` bash -l"
debug1: identity file C:\\Users\\user\\.ssh\\id_rsa type 0
debug1: identity file C:\\Users\\user\\.ssh\\id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_8.1
: command not foundSH_for_Windows_8.1
Respuesta1
RemoteCommand
Dijiste que sólo el host de salto conoce el nombre del host remoto, ¿verdad? Se ProxyCommand
ejecuta en la máquina local, por lo que nunca se ejecutará command_to_get_the_hostname
en el host de salto. Para conectarse primero al host de salto y luego ejecutar el comando allí, puede usar RemoteCommand
en su lugar.
RemoteCommand
Especifica un comando para ejecutar en la máquina remota después de conectarse exitosamente al servidor. La cadena de comando se extiende hasta el final de la línea y se ejecuta con el shell del usuario. - -
P.ej
Host remote
Hostname jump-host.example.com
User user
RemoteCommand ssh user@$(/full/path/to/command_to_get_the_hostname)
Ahora puede conectarse al host remoto usando ssh -t remote
, donde-t
fuerza la asignación pseudo-terminalpara ejecutar $(command)
en el lado remoto, es decir, en el host de salto.
Como efecto secundario, no podrá utilizar el local IdentityFile C:\Users\user\.ssh\id_rsa
para el host remoto, pero el host de salto debe tener la clave, ya que el segundo ssh
ahora se está ejecutando en el host de salto.
ProxyJump
y secuencias de comandos
Si desea utilizar el host de salto como host ProxyJump
( -J
), pudiendo usar el host local IdentityFile
( -i
), ForwardX11
( -X
), ForwardX11Trusted
( -Y
), etc., se necesitarán algunas secuencias de comandos en lugar de usar solo el archivo de configuración SSH. Primero deberá conectarse al host de salto, obtener la dirección del host remoto desde allí y luego usarla en otra conexión SSH.
ConIntentoesto sería algo como:
#!/bin/bash
remotehost=$(\
ssh [email protected] \
/full/path/to/command_to_get_the_hostname) || exit 1
ssh -X -Y -J [email protected] \
-i ~/.ssh/id_rsa user@"$remotehost"
Ipensaresto podría convertirse en unPotencia Shellscript en Windows (no probado):
$remoteHost = ssh.exe [email protected] `
/full/path/to/command_to_get_the_hostname
if (-not $?) {throw "Failed to get the remote hostname"}
ssh.exe -X -Y -J [email protected] `
-i "C:\Users\user\.ssh\id_rsa" "user@$remoteHost"