Bash vergisst SSH-Einstellungen im Skript

Bash vergisst SSH-Einstellungen im Skript

Ich schreibe ein Skript, um einen Satz SSH-Schlüssel zu erstellen und diese auf die bekannten Hosts hochzuladen. Dies ist für den Fall, dass Sie Schlüssel pro Gerät benötigen.

Ich habe eine Option zum Hochladen des neuen Schlüssels auf den Host nach seiner Erstellung hinzugefügt. Allerdings scheint Bash meine Sitzung oder etwas in der Art verloren zu haben, da es mich zur Eingabe eines Kennworts auffordert, obwohl es das Element eigentlich einfach hätte senden sollen, da ich die Schlüssel in einen Schlüsselmanager geladen habe, oder als Ersatzmöglichkeit mich zur Eingabe des Kennworts der in der SSH-Konfiguration angegebenen Schlüsseldatei auffordert.

Hier sind die relevanten Teile des Skripts:

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

Als ich das Skript ausführte, erhielt ich Folgendes:

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.

Jedoch:

$ ssh myhost.com

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

Als Test habe ich dieses vereinfachte Skript geschrieben und es wurde ohne Probleme ausgeführt:

$ 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

Was habe ich in meinem längeren Skript getan, das dazu führte, dass meine SSH-Informationen vergessen wurden?

Antwort1

OK, ich fühle mich ein bisschen dumm, weil mir dieser Fehler unterlaufen ist, aber ein bisschen schlau, weil ich es herausgefunden habe – danke für @Jajukes Vorschlag, ein sehr, sehr ausführliches SSH zu verwenden.

In meiner SSH-Konfiguration habe ich Abkürzungen für meine Hosts eingerichtet, zum Beispiel:

Host myhost
  HostName myhost.com
  User username

Und auf der Shell mache ich einfach alles ssh myhostund alles funktioniert einfach.

In meinem Skript analysiere ich jedoch die Hostnamen von .ssh/known_hosts, das den vollständigen Hostnamen enthält :P In meiner SSH-Konfiguration hatte ich nichts für eingerichtet myhost.com; nur für myhost. Daher ist SSH natürlich auf die Kennwortauthentifizierung zurückgegriffen.

Meine Lösung bestand darin, meine SSH-Konfiguration zu aktualisieren, um neben meinem Alias ​​den vollständigen Hostnamen einzuschließen:

Host myhost myhost.com
  HostName myhost.com
  User username

Und es funktioniert einfach wieder!

Hoffentlich erspart dies jemandem eine ähnliche Verwirrung.

verwandte Informationen