Cómo enviar ssh a un servidor a través de bastión (proxy) con la clave del bastión (proxy) NO del origen

Cómo enviar ssh a un servidor a través de bastión (proxy) con la clave del bastión (proxy) NO del origen

Así que básicamente estoy tratando de hacer esto:

ssh [email protected] -t ssh bob2@test-vm

lo anterior funciona bien si lo coloco en la terminal, sin embargo, me resulta difícil intentar replicarlo a través del archivo de configuración .ssh.

Esto es lo que tengo dentro del archivo de configuración:

Host bastion
     HostName 35.192.152.35
     User bob2

Host test-vm
     User bob2
     FOrwardAgent yes
     ProxyCommand ssh bastion nc %h %p 2> /dev/null

Sin embargo, aparece un error que dice "permiso denegado", ¿archivo de clave pública no válido? Se me ocurrió lo anterior de esta publicación: https://unix.stackexchange.com/questions/124078/how-to-ssh-to-a-server-using-otro-servidor-con-clave-del-segundo-servidor

De alguna manera funcionó para el chico, pero no parece funcionar para mí. También intenté permitir el reenvío de agentes y el reenvío de TCP en la configuración sshd_chroot en todas las partes (origen, bastión y servidor), pero eso no hizo la diferencia.

si fuerzo especificar las rutas de identidad:

Host bastion
     HostName 35.192.152.35
     User bob2
     IdentityFile /Users/bob/.ssh/id_rsa

Host test-vm
     User bob2
     FOrwardAgent yes
     ProxyCommand ssh bastion nc %h %p 2> /dev/null
     IdentityFile /home/bob2/.ssh/id_ed25519

Luego aparece el mismo error, además de decir que no pudo encontrar el directorio "/home/bob2/.ssh/id_ed25519"

¿Alguien tiene alguna idea?

Respuesta1

Una vez que se dé cuenta de que los bastiones sirven para derrotar los firewalls de la red y no para almacenar claves, puede cambiar esto a una solución de 2 comandos con una configuración mínima.

En A, su máquina local, asegúrese de tener un agente ssh ejecutándose.

Realice un comando único para B, donde B tiene la siguiente configuración:

Host B
        ForwardAgent yes
        User proxyuser

Y ejecute el siguiente comando:

$ ssh B ssh-add # and possibly a reference to a non-standard key

En este punto, su agente ssh local tendrá la clave remota en su caché.

Luego, un simple -Jo ProxyJumpto C'simplemente funcionará':

Host C
        User user
        ProxyJump proxyuser@B

$ ssh C

Con el ligero inconveniente de un comando adicional de una sola vez, puedes mantener tu configuración bastante sana en mi opinión.

Podría preguntarse si almacenar la clave en el bastión realmente le brinda seguridad adicional si de todos modos se almacenará en caché en su máquina local. Por supuesto, hay un ligero beneficio denotener la clave almacenada en el disco, pero si su máquina local es pirateada no hay mucha diferencia entre leer un archivo o comunicarse con un agente ssh cargado con claves.

Respuesta2

Parece que desea que su configuración permita que test-vm busque la clave en bastión. Entonces sugiero:

  1. Copie el archivo de clave a la carpeta .ssh de bob2 en bastión.
  2. agregarComando proxycon ssh-add en su configuración.

Respuesta3

A continuación funciona para mí... Casi igual que el tuyo, excepto que especifico la dirección IP del destino final (tal vez no sea relevante en tu caso) yTENÍA QUE COPIARla clave del bastión a mi host local ya que mi ssh_config está encontrando archivos clave aquí, no en el bastión a mitad de camino:

==== added to .ssh/config ====
Host mybastion
    HostName 133.35.41.9
    User bastuser
    IdentityFile /Users/bchapman/.ssh/bast_priv.key

Host mytarget
    HostName 109.0.1.38
    ProxyCommand ssh -q -W %h:%p mybastion
    User targuser
    IdentityFile /Users/bchapman/.ssh/targ_priv.key
==============

Después de eso puedo ssh mytarget, scp localfile mytarget:, etc. muy bien

información relacionada