Eu escrevi um script que faz algo similar (alemão, mas que não parece ser um problema aqui: link ):
echo addkey$'\n'8$'\n'e$'\n'q$'\n'${length}$'\n'"$expire"$'\n'save$'\n' |
LC_ALL= LANGUAGE=en gpg --batch --display-charset utf-8 --utf8-strings \
--passphrase "$PASSPHRASE" --command-fd 0 --edit-key $x_short_id
Isso funciona com o GnuPG 1.4.xe 2.0.x.
Com o 1.4.x, a operação lsign
deve ser facilmente possível de maneira semelhante. Com o 2.0.x você também precisa se preocupar com gpg-agent
. Isso é possível, mas ainda não implementei isso. A ideia básica é:
- Inicie o
gpg-agent
com uma configuração que substituapinentry
. - Use uma substituição
pinentry
que leia os dados necessários de um FIFO (porque o script foi iniciado porgpg-agent
). - Iniciar um processo em segundo plano que grava os dados necessários no FIFO.
Exemplo de código:
echo "OK - what's up?"
while read cmd rest; do
# echo "cmd=$cmd rest=$rest" >&2
: ${PINENTRY_USER_DATA}
case "$cmd" in
\#*)
:
;;
GETINFO)
if [ "pid" = "$rest" ]; then
echo "D $$"
fi
echo "OK"
;;
GETPIN)
read PASSPHRASE <"$input_fifo_path"
echo "D ${PASSPHRASE}"
echo "OK"
;;
BYE)
echo "OK"
exit 0
;;
*)
echo "OK"
;;
esac
done