Verwenden von gpg-agent über ssh

8

Ich habe ein Problem mit dem gpg-agent über ssh über eine einzige Befehlszeile.

Hier ist meine Konfiguration:

Server A: Auslösen des Befehls über ssh.

ssh user@serverB "sudo -E /path/to/script.sh"

Server B: Ausführen des Skripts, für das eine Passphrasensignatur erforderlich ist.

Systeminfo: Ubuntu 12.04

Ich habe den GPG-Agenten auf dem Server B eingerichtet und diese Konfiguration zu /home/user/.bashrc hinzugefügt:

Invoke GnuPG-Agent the first time we login.                                                                          
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty`
export GPG_AGENT_INFO

Hier ist die Konfiguration des Agenten in /home/user/.gnupg/gpg-agent.conf:

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

Damit dies funktioniert, verbinde ich mich über ssh mit dem ServerB:

ssh user@serverB

Der GPG-Agent wird gestartet, ich löse das Skript manuell aus:

sudo -E /path/to/script.sh

Dann fordert mich der GPG-Agent auf, nach einer Passphrase zu fragen. Sobald ich die Passphrase eingerichtet habe, kann ich das Skript erneut ausführen und es erledigt seine Aufgabe, ohne nach einer Passphrase zu fragen.

Mein Problem ist, wenn ich versuche, es fern auszulösen, zB über:

ssh user@serverB "sudo -E /path/to/script.sh"

Es scheint, dass der gpg-Agent nicht funktioniert, weil das Skript mich immer wieder nach einer Passphrase fragt.

Bearbeiten:

Ich habe /etc/sudoers.d/user den folgenden Inhalt hinzugefügt, um das Skript ohne das sudo-Passwort entfernt auszulösen und die Umgebungsvariablen beizubehalten:

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

Irgendwelche Ideen?

Tony
quelle
Verzeihen Sie die Frage, aber sind Sie sicher, dass Sie nach einer Passphrase gefragt werden? Bei dem, was Sie oben gezeigt haben, würde ich erwarten, dass Sie nach einem Kennwort gefragt werden , um den sudoBefehl zu authentifizieren .
MadHatter
Ich habe die sudoers-Datei mit einem NOPASSWD für den Benutzer / Befehl verwaltet, den ich versuche, entfernt auszuführen. Möglicherweise muss ich das auch präzisieren. Es bittet mich um eine Passphrase.
Tony
OK, das macht Sinn; Vielen Dank für die Klarstellung, ich wollte nur sicherstellen, dass wir nicht vom Offensichtlichen gebissen werden!
MadHatter

Antworten:

1

Wenn Sie sich mit anmelden ssh user@serverBund das Skript manuell ausführen, werden Sie zum ersten Mal zur Eingabe der Passphrase aufgefordert. Wenn Sie das Skript ausführen, stellt shh-agent die gespeicherte Passphrase bereit.

Wenn Sie jedoch ausführen, führen ssh user@serverB "sudo -E /path/to/script.shSie jedes Mal eine neue Anmeldung durch, und ich glaube nicht, dass ssh-agent das Speichern der Passphrase über separate SSH-Anmeldungen unterstützen würde.

Der Schlüsselbund scheint das zu tun, was Sie benötigen: http://www.funtoo.org/Keychain

Mit dem Schlüsselbund müssen Sie bei jedem Neustart Ihres lokalen Computers nur einmal eine Passphrase eingeben. Mit dem Schlüsselbund können Remote-Cron-Jobs auf einfache Weise sicher in einen lang laufenden SSH-Agent-Prozess "eingebunden" werden, sodass Ihre Skripte die Vorteile schlüsselbasierter Anmeldungen nutzen können.

Die aktuelle Version des Schlüsselbunds unterstützt sowohl gpg-agent als auch ssh-agent.

v25
quelle
Was die sshKetten betrifft, liegen Sie falsch. Ich mache das oft am Tag; sshvon Host A zu Host B, dann zu C und dann zu D, wobei der ssh-Agent an der Spitze die ganze Zeit über Schlüsseloperationen ausführt.
MadHatter
Mein Verständnis ist, dass er nicht versucht, mit dem Agenten eine Verbindung von A nach B herzustellen. Server B ist als ssh-agent-Client eingerichtet (in jeder Hinsicht), und wenn er sudo -E /path/to/script.shauf Server B ausgeführt wird, erfordert hier etwas die Passphrase. BEARBEITEN: In Anbetracht Ihres Kommentars ist es für ihn möglicherweise sinnvoller, A als Agentenclient zu konfigurieren und die ssh-agent-Weiterleitung zu verwenden, mit der er das Skript auf Server B ausführen kann, ohne dass eine Passphrase erforderlich ist .
25.
Ok, ich werde versuchen, den GPG-Agenten auf dem Server A einzurichten. Haben Sie Informationen zur Weiterleitung von SSH-Agenten? Ich habe diesen Beitrag bisher gesehen: superuser.com/questions/161973/…
Tony
Dies ist gut dokumentiert, hier ist eine Anleitung: livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25
v25, ich entschuldige mich, sieht so aus, als hättest du recht gehabt. Tony, es wird nie funktionieren, wenn Sie den Agenten auf B ausführen, da die Verbindung nicht dauerhaft ist.
MadHatter