2010-10-11 14 views
5

Ich habe ein Continuous Integration Build-System, das ein RPM über ein Shell-Skript generiert, das von Cron ausgelöst wird. Ich möchte das RPM mit gpg unterschreiben, aber gpg besteht darauf, dass der Benutzer die Passphrase manuell an der Konsole eingibt, was eindeutig kein Start ist, da es keine Benutzerkonsole für cron gibt.Verwenden von gpg zum Signieren eines RPM als Teil eines Continuous Build - Wie vermeide ich die Eingabeaufforderung für die Passphrase?

Ich habe gelesen über GPG-Agent, die Sie die Passphrase einmal für die aktuelle Login-Sitzung eingeben können, aber wieder cron hat keine Login-Sitzung. Ich möchte gpg-agent so konfigurieren können, dass es die Passphrase beim Booten einmal akzeptiert und bei Bedarf an die Cron-Sitzung weitergibt. Ich habe keine Ahnung, ob das möglich ist oder nicht, und die Dokumente für gpg-agent sind ziemlich minimal.

Die Alternative wäre, zu erwarten, geben Sie die Passphrase ein, wenn GPG danach fragt, aber dies ist eindeutig ein großes Sicherheitsloch, da die Passphrase in das Build-Skript aufgenommen werden muss.

Antwort

5

Sie sollten gpg-agent beim Start starten und die Umgebungsvariable GPG_AGENT_INFO speichern. Dann können Sie es in der Umgebung Ihres Skripts einrichten und sollten wie erwartet funktionieren. Stellen Sie außerdem sicher, dass die Berechtigungen des Sockets in GPG_AGENT_INFO dem Skript erlauben, sie zu lesen.

+0

Danke, das ist genau das, was ich suche. Aber wie fragen Sie die Berechtigungen für einen Socket ab oder legen Sie sie fest? –

+0

Sie setzen die Berechtigung wie gewohnt (siehe Pfad in GPG_AGENT_INFO). Wenn die Umgebungsvariable gesetzt ist, sollte gpg sie verwenden, ohne dass weitere Aktionen auf Ihrer Seite ausgeführt werden. Beachten Sie, dass ich diesen Fall nicht ausprobiert habe, also schauen wir mal, ob es funktioniert;) – smola

-1

Unabhängig davon, welches Build-Tool Sie zum Generieren der RPM verwenden, könnte es signieren. Zum Beispiel hat Gradle ein Plugin, das die Signierung für Sie übernimmt. Sie müssen eine Eigenschaftendatei mit der ID, dem Passphrase und dem Speicherort der Schlüsselringdatei erstellen, und sie erledigt den Rest.

See: https://docs.gradle.org/current/userguide/signing_plugin.html

+1

Während dies theoretisch die Frage beantworten könnte, [wäre es vorzuziehen] (// meta.stackoverflow.com/q/8259), das Wesentliche einzubeziehen Teile der Antwort hier und bieten den Link als Referenz. –