bash olvida la configuración de ssh en el script

bash olvida la configuración de ssh en el script

Estoy escribiendo un script para crear claves ssh activadas y subirlas a los hosts conocidos. Esto es para cuando quieres claves por dispositivo.

Incluí una opción para cargar la nueva clave al host después de su creación. Sin embargo, bash parece haber perdido mi sesión o algo así, porque me solicita una contraseña, cuando debería haber enviado el elemento ya que tengo las claves cargadas en un administrador de claves, o como alternativa, solicitarme la contraseña. del archivo de claves especificado en la configuración ssh.

Aquí están las partes relevantes del guión:

for host in "${hosts[@]}"
do
  keyfile=$(printf "%s_keys/%s_%s_%s.id_ed25519" "$system" "$system" "$email" "$host")
  ssh-keygen -t ed25519 -C $(printf "%s_%s" "$email" "$system") -P "$pw1" -f "$keyfile"
  read -r -p "ssh new key to host $host? [y/n] " response
  if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
  then
    cat $keyfile.pub | ssh "$host" 'cat >> .ssh/authorized_keys'
  fi
done

Entonces cuando ejecuté el script, obtuve esto:

The key fingerprint is:
SHA256:n8FWwe+TaHbWKwWVzCdIbAcfFnPTh8J0pukzuv9J4pQ a_b
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
ssh new key to host [email protected]? [y/n] y
[email protected]'s password:
Permission denied, please try again.

Sin embargo:

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:28:07 2016 from 65.60.221.155
[myhost.com ~]

Como prueba, escribí este script más simplificado y se ejecutó sin problemas:

$ cat test.bash
#!/bin/bash
echo test | ssh myhost.com 'cat >> test.txt'
$ ./test.bash

$ ssh myhost.com

You have new mail.
Last login: Sun Oct 30 03:33:25 2016 from 65.60.221.155
[myhost.com ~] cat test.txt
test

¿Qué hice en mi script más largo que provocó que se olvidara mi información ssh?

Respuesta1

Vale, me siento un poco tonto por haber cometido este error, pero un poco inteligente por haberlo descubierto... gracias a la sugerencia de @Jajuke de hacer un ssh muy, muy detallado.

En mi configuración ssh, tengo abreviaturas configuradas para mis hosts, por ejemplo:

Host myhost
  HostName myhost.com
  User username

Y en el caparazón, simplemente lo hago ssh myhosty todo funciona.

Sin embargo, en mi script, analizo los nombres de host de .ssh/known_hosts, que tiene el nombre de host completo :P En mi configuración ssh, no tenía nada configurado para myhost.com; justo myhost. Entonces, por supuesto, ssh recurrió a la autenticación de contraseña.

Mi solución fue actualizar mi configuración ssh para incluir el nombre de host completo junto a mi alias:

Host myhost myhost.com
  HostName myhost.com
  User username

¡Y simplemente funciona de nuevo!

Con suerte, esto salvará a alguien de un desconcierto similar.

información relacionada