• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[GELÖST] Passwort aus Keychain für SSH (Lösung via sshpass)

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Hallo,

Ich würde gerne ein Bash-Script schreiben, welches sich mit meinem Webspace-SSH verbindet.
Allerdings soll dabei auch das Passwort automatisch eingegeben werden, weswegen ich es über die Schlüsselbundverwaltung in der Keychain gespeichert habe und es über den security find-generic-password Befehl auslese.

(Natürlich bin ich mir bewusst, dass Public-Key Authentifizierung die bessere Lösung ist, allerdings kann ich das auf meinem leider Webspace nicht umsetzen.)


Nun möchte ich das Passwort an den SSH-Befehl mitgeben, allerdings scheitere ich dabei. (Was sicherlich daran liegt dass ich fast gar keine Erfahrung mit Bash-Scripting habe)

Dies ist der Code den ich bisher habe:
Code:
 #!/bin/sh
# Passwort erhalten
security find-generic-password -l 'Keychain Eintrag' -a keychain-user -w

# SSH-Connect
ssh [email protected]

Mit einer Pipe hat es auch nicht funktioniert: Pseudo-terminal will not be allocated because stdin is not a terminal.

Wie bekomme ich es hin, dass das Passwort direkt eingegeben wird?

Besten Gruß,
Tim
 

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Danke für die Antwort!

Also ich bin jetzt schon soweit dass ich das Passwort übergeben kann, allerdings nur wenn ich es im Klartext als Variable speicher:
Code:
#!/usr/bin/expect -f

set password PASSWORT
spawn ssh [email protected]
expect "*?assword:*"
send -- "$password\r"
expect eof

Allerdings kann ich nun den security find-generic-password Befehl nicht ausführen:
Code:
invalid command name "security"
    while executing
"security find-generic-password -l 'KEYCHAIN LABEL' -a BENUTZER -w"

Und generell würde mich interessieren, wie ich die Ausgabe des security Befehls an eine Variable übergeben kann…? :p

Gruß,
Tim
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Die Ausgabe eines Befehls (bzw einer Pipe) in ein anderes Kommando als String einzusetzen ist ganz simpel. Genauso wie Variablenersetzung, nur mit gewöhnlichen statt mit geschweiften Klammern.
Beispiel:
Code:
echo "Heute ist: $(date) ...und das ist gut so.";
Alles was zwischen den Klammern steht ist ein beliebig komplexer Ausdruck, auch ganze Skripte mit hunderten Zeilen Code kannst du da reindröseln. Eingesetzt wird dann alles, was während des Ablaufs über die Standardausgabe dieser Subshell rausgehauen wurde.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: timmy38233

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Ah danke, das kannte ich noch nicht.

Ich habe es nun gelöst, wenn auch über einen anderen Weg…
Mit expect hat es zwar grundsätzlich auch geklappt, allerdings konnte ich dann in der SSH-Shell keine Befehle mehr ausführen?! Nach der Eingabe eines Befehls, kam keine Antwort und der Cursor hat nur geblinkt (allerdings ohne die Zeile für einen neuen Befehl).

Ich habe mir kurzerhand per Homebrew sshpass installiert. Folgenden Befehl nutze ich nun um mich mit dem Passwort aus der Keychain zu dem Server zu verbinden:
Code:
#!/bin/bash
sshpass -p $(security find-generic-password -l 'KEYCHAIN LABEL' -a BENUTZER -w) ssh [email protected]

Nun funktioniert es bei mir ohne Probleme :)