Wie kann ich dem ssh-agent mitteilen, dass er sich beenden soll?

Mathias Bauer mbauer at mailbox.org
Sa Dez 13 11:31:35 CET 2014


Hallo Helmut,

* Helmut Waitzmann schrieb am Fr, 12. Dez 2014, um 20:18 (+0100):

hier läuft
  $ gpg-agent --version
  gpg-agent (GnuPG) 2.0.19

> Wie beende ich den gpg-agent?  Kann mir da der
> gpg-connect-agent helfen und, wenn ja, wie?

Nein.

> Laut Dokumentation kann man dem gpg-agent zum Beenden ein INT‐
> oder TERM‐Signal schicken.  Aber wie komme ich verlässlich an
> die Prozessnummer des Agents heran?

Ein TERM beendet den Agenten; bei drei TERMs oder einem INT
geschieht das sofort (ohne Rücksicht auf Verluste).  Die
Prozessnummer ist Teil von GPG_AGENT_INFO:
  /path/to/socket/S.gpg-agent:12345:1

Mit einigen (POSIX-)Shell-Kommandos erhält man:

  P="${GPG_AGENT_INFO#*:}"
  P="${P%:*}"

> „Verlässlich“ heißt: Auch im Fall, dass der Agent abgestürzt
> ist und bereits ein anderer, unbeteiligter Prozess gestartet
> wurde, der zufällig seine Prozessnummer erhalten hat, muss
> sichergestellt werden können, dass dann nicht fälschlicherweise
> dem anderen Prozess ein TERM‐Signal geschickt wird.

Kurz: Steckt hinter P wirklich der Agent?  Das ist jetzt nicht
mehr ganz so lustig:

  if [ -n "$P" ] && \
     [ -d "/proc/$P" ] && \
     [ "x$(/bin/readlink "/proc/$P/exe")" = x/usr/bin/gpg-agent ]
  then
    kill -TERM "$P"
    sleep 2
    kill -0 "$P" >/dev/null 2>&1 && kill -INT "$P"
    sleep 1
    kill -0 "$P" >/dev/null 2>&1 && kill -KILL "$P"
  fi

Erklärung: *Wenn* es (a) ein P gibt und (b) einen Prozess dazu
und (c) dessen auführbare Datei mit dem Pfad zum Agent-Programm
übereinstimmt, *dann* beende den Agent freundlich und warte.
Wenn er danach immer noch da ist, beende ihn "unfreundlich".

Diese Prüfung ist zwar immer noch offen für Race conditions, aber
doch etwas sicherer.  Man kann das noch beliebig(!) ausbauen:
Behandlung von GPG_AGENT_INFO, Agent mit --write-env-file
starten,...

Natürlich kannst Du auch einfach mit

  killall -v -TERM gpg-agent

alle Agenten grob beenden.  Aber das empfehle ich nicht pauschal.

> Weiß jemand Rat?

Das ganze Vorgehen ist abhängig davon, wie Deine Sessions
gestartet werden, ob Konsole und/oder X, ob mehrere parallel,
etc.

Ich hoffe, die obigen Schritte helfen Dir erst einmal weiter.

Gruß,
Mathias

-- 
CAcert Assurer - See http://www.CAcert.org for details or ask me
GnuPG/OpenPGP: B100 5DC4 9686 BE64 87E9 0E22 44C3 983F A762 9DE8
-------------- n�chster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 760 bytes
Beschreibung: nicht verfügbar
URL         : </pipermail/attachments/20141213/02649ecf/attachment.sig>


Mehr Informationen über die Mailingliste Gnupg-de