Usando gpg en Launch Agent

0

¿Es posible firmar confirmaciones sin escribir una frase de contraseña desde un script ejecutado a través de Launch Agent? Si es así, ¿cómo debo configurar gpg-agent para que funcione? Tenga en cuenta que no escribo la frase de contraseña cuando confirmo desde el shell, por lo que esa parte está funcionando.

Ahora que se hace la pregunta, permítame compartir más antecedentes sobre mi problema.

Cada vez que ejecuto gpg en un script que se está ejecutando a través de Launch Agent, veo el siguiente error en los registros.

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

En ese script estoy tratando de escribir el compromiso con la firma. El script se encuentra en $HOME/.local/bin . El archivo de mi agente plist está siguiendo.

<?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>

Estoy iniciando este agente manualmente mediante el siguiente comando (asegurándome de que el agente esté cargado antes de iniciarlo).

$ launchctl start com.example.signed_commit

El script es bastante simple.

#!/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')"

Como puede ver, para fines de prueba estoy creando un repositorio de prueba donde creo confirmaciones vacías. Pero siempre falla con el error que publiqué al principio de esta publicación.

Configuraciones relevantes para 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

Cuando ejecuto gpg --version en ese script, veo lo siguiente en la salida del agente.

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

Lo que es idéntico a lo que veo cuando ejecuto gpg --version solo en mi shell.

    
pregunta d12frosted 05.09.2016 - 09:04

0 respuestas

Lea otras preguntas en las etiquetas