Configuración local del host Jump Bastion del servidor de puerta de enlace

Configuración local del host Jump Bastion del servidor de puerta de enlace

Quiero enviar ssh a un host privado remoto utilizando un servidor intermedio (bastión, salto, puerta de enlace). Este comando funciona bien:

ssh gateway ssh private

Con esta configuración ~/.ssh/config:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

¿Cómo puedo implementar esto en mi ~/.ssh/config? Probé numerosas iteraciones de ProxyCommand sin suerte. Quiero utilizar el archivo de identidad ubicado en el host de la puerta de enlace para acceder a hosts privados. Quiero poder hacer:

ssh private

Conozco la técnica que se describe aquí, pero requiere que mi clave pública esté en todos los hosts privados, pero no quiero eso:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

Respuesta1

Primero, configure sus claves ssh en la puerta de enlace para que pueda utilizar ssh en privado. Luego, en su cliente, cree un par de claves pública y privada independiente que utilice para autenticarse en la puerta de enlace. P.ej ssh-keygen -t rsa -f id_gateway.

Luego, en la puerta de enlace, utilice la command=sintaxis de su archivo autorizado_keys. Por ejemplo, su entrada podría verse así:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

Busque en la página de manual de sshd para command="command"obtener más información. Asegúrese de agregar la clave id_gateway.pub a esta línea. Luego, en .ssh/configtu cliente, agrega una entrada como esta:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Ahora, desde su cliente debería poder ssh privateingresar directamente. Esto incluso funciona para scpy sftp.

Crédito adicional

Si desea utilizar esto para varios servidores, pero solo desea administrar una clave pública en la puerta de enlace, puede utilizar el siguiente truco. sshdDe forma predeterminada, solo permite recibir ciertas variables del entorno local. Uno de ellos es LC_PAPERel que rara vez se utiliza para nada. Entonces podemos usarlo para pasar el nombre de host del servidor de la siguiente manera:

Primero, cambie la entrada de clave pública a

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

Luego, en su cliente, agregue una función a su .bashrcarchivo (o cualquier shell que use) que se vea así:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

Luego crea un alias si quieres:

alias ssh=ssh_proxy

Finalmente, agregue Hostsecciones .ssh/configcomo la que se muestra arriba. Por ejemplo:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Ahora debería poder hacerlo ssh privatecon ssh private2solo una clave pública en la puerta de enlace.

información relacionada