Utilizzo di gpg in Launch Agent

0

È possibile firmare commit senza digitare passphrase da uno script eseguito tramite Launch Agent? In tal caso, come dovrei configurare gpg-agent per farlo funzionare? Nota che non scrivo passphrase quando eseguo il commit dalla shell, quindi quella parte funziona.

Ora che la domanda è stata posta, permettimi di condividere più informazioni sul mio problema.

Ogni volta che eseguo gpg in uno script che viene eseguito tramite Launch Agent, vedo i seguenti errori nei log.

gpg: cannot open '/dev/tty': Device not configured
error: gpg failed to sign the data
fatal: failed to write commit object

In quello script sto provando a scrivere commit con la firma. Lo script si trova in $HOME/.local/bin . Il mio agente plist sta seguendo.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.example.signed_commit</string>
    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/Users/d12frosted/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
      <string>signed_commit</string>
      <string>-o</string>
      <string>/unrelated/arguments/</string>
    </array>
    <key>StartInterval</key>
    <integer>21600</integer>
    <key>StandardOutPath</key>
    <string>/Users/d12frosted/Library/Logs/com.example.signed_commit.stdout</string>
    <key>StandardErrorPath</key>
    <string>/Users/d12frosted/Library/Logs/com.example.signed_commit.stderr</string>
  </dict>
</plist>

Sto avviando manualmente questo agente tramite il seguente comando (assicurandoti che l'agente sia caricato prima di avviarlo).

$ launchctl start com.example.signed_commit

Lo script è piuttosto semplice.

#!/usr/bin/env bash
if [[ ! -d $HOME/test_repo ]]; then
   mkdir -p "$HOME/test_repo"
   cd "$HOME/test_repo"
   git init
   # setup signing (omitted, due to privacy)
fi
cd "$HOME/test_repo"
git commit --allow-empty -m "snapshot $(date '+%d/%m/%y %H:%M:%S')"

Come puoi vedere, per scopi di test sto creando un repository di test dove creo commit vuoti. Ma fallisce sempre con l'errore che ho postato all'inizio di questo post.

Configurazioni rilevanti per gpg .

# $HOME/.gnupg/gpg.conf
require-cross-certification
keyserver hkp://keys.gnupg.net
use-agent

# $HOME/.gnupg/gpg-agent.conf
pinentry-program /usr/local/bin/pinentry-mac

Quando eseguo gpg --version in quello script, vedo che segue nell'output dell'agent.

gpg (GnuPG) 2.0.30
libgcrypt 1.7.3
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA, RSA, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Che è identico a quello che vedo quando si esegue gpg --version nella mia shell.

    
posta d12frosted 05.09.2016 - 09:04
fonte

0 risposte

Leggi altre domande sui tag