¿Cómo conectar SSH a un servidor al que solo se puede acceder y acceder desde Jump Host?

¿Cómo conectar SSH a un servidor al que solo se puede acceder y acceder desde Jump Host?

Puedo SSH el servidor host de salto B desde mi máquina local A a través de ssh B.

El servidor C solo es direccionable (tiene una dirección C.internal) y accesible desde B a través de ssh C.

¿Cómo ingreso SSH a C directamente desde mi máquina local?

¿Cómo se verían el comando SSH y el archivo de configuración?

configuración ssh en A:

Host B
    User userB
    HostName B.example.com
    IdentityFile ~/.ssh/keyB

configuración ssh en B:

Host C
  HostName C.internal
  User userC
  IdentityFile ~/.ssh/keyC

¿Es posible hacer esto sin copiar ~/.ssh/keyCdesde el host B a la máquina local A?

Respuesta1

Hay varias opciones, pero ninguna de ellas es de "comando único":

Podrías ejecutar un comando SSH en B que simplemente ejecuta un segundo comando SSH en C; necesitas agregar la -topción para que funcione para SSH interactivo:

  • ssh -t hostB "ssh hostC"
  • ssh -t hostB "ssh -t hostC htop"
  • ssh hostB ssh hostC ls -la /etc

Si desea una forma de SSH "directamente" de A a C, necesitará algún artilugio adicional para reenviar una conexión de agente sshdesde Bal sistema local (es decir, lo contrario de lo que ssh -Aharía normalmente).

  1. SSH al host B, luego inicie un agente ssh en una ruta especificada manualmente. Utilice la función SSH "transmitir hacia adelante" para permitir que los clientes locales accedan al proceso del agente remoto:

    HostA$ ssh -t -L /tmp/agent:/tmp/agent HostB \
        "ssh-agent -a /tmp/agent sh -c 'ssh-add ~/.ssh/keyC && sleep infinity'"
    

    (La opción ssh/config es LocalForward).

  2. Mientras la conexión anterior esté ejecutándose, puede conectarse desde HostA a HostC usando la configuración normal de ProxyJump, usando claves que solo existen en HostB:

    HostA$ export SSH_AUTH_SOCK=/tmp/agent
    HostA$ ssh -J HostB HostC
    

    (Las opciones de ssh/config son IdentityAgenty ProxyJump.)


Otra opción es copiar keyCde B a A y almacenarlo.en hardware segurocomo un chip TPM o una tarjeta inteligente (también cuenta una Yubikey con modo PIV). Esto permite utilizar la clave localmente en la máquina A sin posibilidad de robo.

(Para TPM2.0 en Linux, puede optar por tpm2-pkcs11o ssh-tpm-agent; TPM2.0 en Windows se puede usar a través de PuTTY-CAC. Para Yubikeys con PIV, hay módulos PKCS#11 tanto para Windows como para Linux. Estoy usando un eToken 5110 de Ebay También hay una manera de usar claves FIDO2 con SSH, pero requeriría generar una nueva clave).

Respuesta2

Necesita un archivo ssh_config como global /etc/ssh/ssh_configo como usuario ~/.ssh/config:

Host B
  HostName 10.0.0.1
  User username_on_B
  IdentityFile ~/.ssh/id_rsa_for_B
  ForwardAgent yes

# final destination
Host C
  HostName C.internal
  User your_username_on_C
  ProxyJump B
  IdentityFile ~/.ssh/id_rsa_for_C

Ahora, desde A, puedes ssh C.

información relacionada