Parallel-SSH mit passphrasengeschütztem SSH-Schlüssel

8

Ich möchte meinen passphrasengeschützten SSH-Schlüssel verwenden, wenn ich Aufgaben mit parallel-ssh(und verwandten Tools) ausführe . Ich kann dies jedoch nicht zum Laufen bringen.

Alle diesbezüglichen Unterlagen parallel-sshzeigen, dass ich dies verwenden --askpassoder -Atun sollte:

-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 dies 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 jedem der Computer funktionieren, daher habe ich keine Ahnung, wie dies funktioniert.

Nathan S. Watson-Haigh
quelle
Ich gehe davon aus, dass parallel-ssh dasselbe ist wie pssh?
slm
Ja, parallel-sshund psshsind in der Tat gleich.
Nathan S. Watson-Haigh

Antworten:

5

Unter der Annahme, dass parallel-sshund psshgleichwertig sind, sollte das, was Sie versuchen, gut funktionieren, wenn Sie die Passphrase mit dem -ASchalter weiterleiten.

Beispiel

Hier ist ein Beispiel , wo ich zwei verschiedene Systeme zu verbinden, host1und host2. Ich benutze den -lSchalter, psshum einen Standardbenutzer von bereitzustellen root. Allerdings host2überschreibe ich dies im -HSwitch, 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 Befehls bemerken, den ich ausführe echo "hi".

Ihr Problem

Das Problem, auf das Sie mit einer Passphrase auf Ihrem SSH-Schlüsselpaar stoßen, ist auf einen Fehler zurückzuführen. Dies ist der Fehler mit dem Titel: Problem 80: Passphrase nicht übergeben? . Der 4. Kommentar zu diesem Problem zeigt einen Patch:

Auszug

# 4 robine ... @ gmail.com

Ich habe die Zeile in geändert

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

und es scheint zu funktionieren

Verweise

slm
quelle
Danke für deine Eingabe slm. parallel-sshund psshsind in der Tat die gleichen. Ich habe nicht gefragt, ob es möglich ist - die Dokumentation macht deutlich, dass es möglich ist. Ich habe Probleme damit, es tatsächlich zum Laufen zu bringen, wie es dokumentiert ist.
Nathan S. Watson-Haigh
1
@ NathanS.Watson-Haigh - siehe Update. Es ist ein Fehler, ich habe den Patch überarbeitet.
slm
Dies ist in der Tat das Problem, das mich betrifft. Da die Autoren von parallel-sshjedoch immer noch nicht sicher sind, wie sie die Frage nach der Passwortabfrage am besten erkennen und daher mit dem eingegebenen Passwort / der eingegebenen Phrase antworten können, bleibe ich bei meiner Schlüsselbundmethode. Ich möchte nicht, dass meine Passphrase versehentlich an die falsche Eingabeaufforderung weitergegeben wird.
Nathan S. Watson-Haigh
1
Ich werde dies als Antwort akzeptieren, da Sie herausgefunden haben, dass dies ein bekannter Fehler bei der parallel-sshWeitergabe der Passphrase war SSH. Für diejenigen, die in Zukunft auf diese Frage stoßen, wurde dieser Fehler möglicherweise behoben, oder Sie möchten die askpass_client.pyDatei möglicherweise nicht bearbeiten . In beiden Fällen können Sie dies mithilfe der keychainAntwort ( unix.stackexchange.com/a/128998/57414 ) oder der Antwort des SSH -Agenten ( unix.stackexchange.com/a/129022/57414 )
Nathan S. Watson- umgehen. Haigh
5

Ich habe es geschafft, dies durch Installation zu erreichen, keychainanstatt den Fehler , der meine Probleme verursacht, manuell zu patchen .

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

Führen Sie den Befehl ohne Kennwort- / Passphrase-Eingabe aus

Dieses Mal brauche ich meine Passphrase nicht, wenn ich anrufe, parallel-sshda der Schlüsselbund für die Authentifizierung sorgt:

$ 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

Führen Sie den Schlüsselbund beim Anmelden aus

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 zur Eingabe der Passphrase Ihres Schlüssels aufgefordert werden. Ihr Schlüssel bleibt dann bis zum nächsten Neustart im Schlüsselbund oder Sie löschen den Schlüsselbund manuell.

Cron Jobs Verwenden des Schlüsselbunds

~/.bash_profileWenn das oben Genannte in Ihre Datei eingegeben wurde , können Sie die Tatsache nutzen, dass Ihr Schlüssel jetzt im Schlüsselbund gespeichert ist, indem Sie dieselbe Datei säuern, bevor Ihr Cronjob ausgeführt wird. Zum Beispiel habe ich ein Backup-Skript, das jeden Abend um 21:00 Uhr ausgeführt wird und Inhalte über SSH auf einen Remotecomputer kopiert. Dies ist ein Eintrag in meinem crontab ( crontab -e):

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh
Nathan S. Watson-Haigh
quelle
1

Verwenden Sie den ssh-agent zur automatischen Authentifizierung (mit einem Shell-Namen als Argument, damit die Agentenumgebungsvariablen in dieser neuen Shell festgelegt werden). Fügen Sie den Schlüssel mit ssh-add hinzu und geben Sie Ihr Passwort nur einmal ein.

$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity: 
$ 
$ pssh ...
Emmanuel
quelle