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?
sudo
Befehl zu authentifizieren .Antworten:
Wenn Sie sich mit anmelden
ssh user@serverB
und 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.sh
Sie 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
quelle
ssh
Ketten betrifft, liegen Sie falsch. Ich mache das oft am Tag;ssh
von 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.sudo -E /path/to/script.sh
auf 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 .