Cómo configurar una conexión SSH usando un nombre de host variable proporcionado por el servidor Jump

Cómo configurar una conexión SSH usando un nombre de host variable proporcionado por el servidor Jump

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 ProxyCommandejecuta en la máquina local, por lo que nunca se ejecutará command_to_get_the_hostnameen el host de salto. Para conectarse primero al host de salto y luego ejecutar el comando allí, puede usar RemoteCommanden 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_rsapara el host remoto, pero el host de salto debe tener la clave, ya que el segundo sshahora se está ejecutando en el host de salto.

ProxyJumpy 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"

información relacionada