Ich möchte meinen durch eine Passphrase geschützten SSH-Schlüssel verwenden, wenn ich Aufgaben mit parallel-ssh
(und verwandten Tools) ausführe. Ich bekomme das jedoch nicht zum Laufen.
Aus der gesamten Dokumentation bezüglich parallel-ssh
geht hervor, dass ich in der Lage sein sollte, Folgendes zu verwenden --askpass
oder -A
zu tun:
-A
--askpass
Prompt for a password and pass it to ssh. The password may be
used for either to unlock a key or for password authentication. The
password is transferred in a fairly secure manner (e.g., it will not
show up in argument lists). However, be aware that a root user on
your system could potentially intercept the password.
Wenn ich jedoch die Passphrase meines Schlüssels eingebe, funktioniert es nicht:
$ parallel-ssh --hosts=machines --user=my_user --askpass \
--timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa':
Permission denied (publickey,password).
Ich habe bestätigt, dass mein SSH-Schlüssel und meine Passphrase auf allen Maschinen funktionieren, daher habe ich keine Ahnung, wie ich das zum Laufen bekomme.
Antwort1
Vorausgesetzt, dass parallel-ssh
und pssh
gleichwertig sind, sollte Ihr Versuch mit der Weiterleitung der Passphrase über den -A
Switch problemlos funktionieren.
Beispiel
Hier ist ein Beispiel, bei dem ich eine Verbindung zu zwei verschiedenen Systemen herstelle, host1
und host2
. Ich verwende den -l
Switch, um pssh
einen Standardbenutzer von anzugeben root
. Auf überschreibe ich dies jedoch host2
im -H
Switch, indem ich den Hostnamen als angebe user1@host2
.
$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr:
This is a private site. Unauthorized connections are prohibited.
All activity may be logged. Disconnect immediately if you object to
this policy or are not an authorized user.
X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr:
This is a private site. Unauthorized connections are prohibited.
All activity may be logged. Disconnect immediately if you object to
this policy or are not an authorized user.
ControlSocket /home/user1/.ssh/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.
Wenn das oben genannte funktioniert, werden Sie die Ausgabe des von mir ausgeführten Befehls sehen echo "hi"
.
Ihr Anliegen
Das Problem, das Sie mit einer Passphrase für Ihr SSH-Schlüsselpaar haben, ist auf einen Fehler zurückzuführen. Dies ist der Fehler mit dem Titel:Problem 80: Passphrase nicht weitergegeben?. Der vierte Kommentar zu diesem Problem zeigt einen Patch:
Auszug
#4[email geschützt]
Ich habe die Zeile geändert in
if not ( prompt.strip().lower().endswith('password:') or 'enter passphrase for key' in prompt.strip().lower()):
und es scheint zu funktionieren
Verweise
Antwort2
Ich habe es geschafft, dies zum Laufen zu bringen, indem ich das installierte, keychain
anstatt es manuell zu patchenInsektverursacht meine Probleme.
Schlüsselbund installieren und manuell ausführen
# install keychain package
$ sudo apt-get install keychain
# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa
# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh
Befehl ohne Eingabe von Passwort/Passphrase ausführen
Dieses Mal brauche ich meine Passphrase beim Anrufen nicht parallel-ssh
, da der Schlüsselbund die Authentifizierung übernimmt:
$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap
Schlüsselbund beim Anmelden ausführen
Anstatt Ihren Schlüssel manuell ausführen und zum Schlüsselbund hinzufügen zu müssen, fügen Sie einfach Folgendes am Ende Ihres hinzu ~/.bash_profile
:
$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh
Dadurch wird sichergestellt, dass Sie bei Ihrer ersten Anmeldung nach einem Neustart nach der Passphrase Ihres Schlüssels gefragt werden. Ihr Schlüssel bleibt dann bis zum nächsten Neustart im Schlüsselbund, oder Sie löschen den Schlüsselbund manuell.
Cron Jobs Verwendung des Schlüsselbundes
Wenn Sie das oben genannte in Ihre ~/.bash_profile
Datei eingegeben haben, können Sie die Tatsache, dass Ihr Schlüssel jetzt im Schlüsselbund gespeichert ist, ausnutzen, indem Sie dieselbe Datei vor dem Ausführen Ihres Cronjobs sauer machen. Ich habe beispielsweise ein Backup-Skript, das jede Nacht um 21:00 Uhr ausgeführt wird und Sachen per SSH auf einen Remote-Computer kopiert. Dies ist ein Eintrag in meiner Crontab ( crontab -e
):
0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh
Antwort3
Verwenden Sie dieSSH-Agentautomatisch authentifizieren (mit einem Shell-Namen als Argument, damit die Agent-Umgebungsvariablen in dieser neuen Shell gesetzt werden). Fügen Sie den Schlüssel mitssh-hinzufügenund geben Sie Ihr Passwort nur einmal ein.
$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity:
$
$ pssh ...