Túnel ssh interrumpido para desbloquear la clave: buscando un solo comando

Túnel ssh interrumpido para desbloquear la clave: buscando un solo comando

Estoy intentando crear un túnel ssh para acceder a un servidor remoto (A) al que solo se puede acceder a través de otro servidor (B). Tengo una clave en mi máquina local (L) para llegar al servidor de retransmisión (B) y otra clave en el servidor de retransmisión (B) para llegar al servidor de destino (A).

[máquina local (L) con clave para el servidor de retransmisión (B)] --> [servidor de retransmisión (B) con clave para el servidor de destino (A)] --> [servidor de destino (A)]

Tengo un archivo ~/.ssh/config que se ve así en mi máquina local (L):

Host relay.server(B)
    Hostname relay.server
    Port 22
    User me
    IdentityFile ~/.ssh/id_rsa

Host destination.server(A)
    Hostname destination.server
    Port 1122
    User me
    IdentityFile ~/.ssh/id_rsa

Y puedo hacer que mi túnel funcione claramente con lo siguiente:

ejecutando el comando: ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)en mi máquina local (L). Esto me solicita una contraseña para desbloquear la primera clave y luego parece que se bloquea, no devuelve un mensaje, usar la -fopción o terminar con un &me impide ingresar la contraseña. Sin embargo, si ejecuto ^Ceste comando después de ingresar la contraseña y luego ingreso, ssh destination.server(A)aparece un mensaje para proporcionar una contraseña para desbloquear la segunda clave, después de lo cual me conecto al servidor de destino (A).

Estoy buscando un comando único que me permita conectarme al servidor de destino (A) desde mi máquina local (L) y me pedirá que proporcione las contraseñas necesarias para desbloquear cada clave. O una sugerencia sobre una forma alternativa de organizar las cosas para poder conectarme directamente al servidor de destino (A) desde mi máquina local (L) a través del servidor de retransmisión (B).

Respuesta1

La respuesta corta es que necesitas

  • ProxyCommandusando ncpara conectarse a través de
  • ForwardAgentpara pasar llaves
  • asegúrese de que su clave pública forme parte de .ssh/authorized_keystodos los servidores
Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ProxyCommand    ssh -q relay "nc %h %p"
    ForwardAgent    yes

La porción más larga.

La ProxyCommandopción en ssh config ejecuta un comando cada vez que Hostse utiliza ese carácter adjunto. Por lo general, se usa con ncel disponible en nmap.org, también conocido como, ncaty tiene muchas opciones.

En la Host destinationentrada anterior de ssh config, ProxyCommandse configuró ssh -q relay "nc %h %p"lo que dice, ssh para retransmitir silenciosamente y ejecutar nc destination.server.fqdn.or.IP 22.

ncrealiza la conexión entre el ssh entrante y el destino.

Le ForwardAgent yesdice a ssh que agregue la clave a un agente ssh. Los agentes ssh realizan un seguimiento de las claves y se utilizan para pasar automáticamente la correcta a un host según sea necesario. Le ForwardAgent yesdice al agente que pase la clave a otro agente en el relé y luego nuevamente al destino.

Ahora, para que todo esto funcione, cada servidor al que acceda y, en última instancia, el destino debe tener la clave pública asociada con su clave privada (id_rsa) en su .ssh/authorized_keysarchivo. Cuando creó su clave privada, id_rsa, también debería haberse creado una clave pública, id_rsa.pub.

Si no tiene su clave pública, siempre puede obtenerla de la clave privada a través de ssh-keygen -y -f ~/.ssh/id_rsapara copiar y pegar fácilmente. Tenga en cuenta que la clave pública tiene 2 o 3 campos separados por espacios pero estáunolínea.

Entonces, ssh relayedite ~/.ssh/authorized_keys(que puede no existir, por lo que mkdir -p ~/.sshpuede ser necesario) y pegue la clave pública en una nueva línea (o en la primera si no está presente).

Mientras esté en el servidor de retransmisión, verifique que ncexista en /bin o /usr/bin. Si no es así, deberá instalarlo usando su administrador de paquetes, ya sea yum o apt-get.

Desde el servidor de retransmisión ssh destinationy haga la misma actualización de ~/.ssh/authorized_keys.

exithasta llegar a su máquina local y debería poderssh destination

Respuesta2

Las versiones más nuevas de OpenSSH ProxyJumppermiten .ssh/config:

Host relay
    Hostname        relay.server.fqdn.or.IP
    User            me
    IdentityFile    ~/.ssh/id_rsa
    ForwardAgent    yes

Host destination
    Hostname        destination.server.fqdn.or.IP
    ProxyJump       relay
    User            me
    IdentityFile    ~/.ssh/id_rsa

información relacionada