2014-09-04

在 Cron Job, Jenkins 或其它程式中使用 GPG

凍仁於 Jenkins CI 的 build script 中使用到的 GPG 指令時,出現了 gpg: cannot open `/dev/tty\': No such device or address 的錯誤訊息。

查了一下才得知 GPG 在正常情狀下預設是會將結果輸出至具有互動的終端機 (Terminal, tty) 底下,但如果今天我們是藉由 Cron Job, 自行撰寫的程式或是 Jenkins 來操作時則會有以上的錯誤訊息, 這時我們只需加上「--no-tty」的選項即可避開之。

1. 在 Jenkins 裡使用 GPG 進行對稱式加密。
[ jenkins@ci-server ~ ]
$ echo PASSWORD | gpg --batch -q --passphrase-fd 0 --cipher-algo AES256 --no-tty -c /tmp/file.tgz

2. 在 Jenkins 裡使用 GPG 進行對稱式解密。
[ jenkins@ci-server ~ ]
$ echo PASSWORD | gpg --batch -q -o /tmp/file.tgz --passphrase-fd 0 --decrypt --no-tty /tmp/file.tgz.gpg

相關連結:
Encryption files with GPG without user intervention (batch) - LinuxScrew: Linux Blog

資料來源:
The Dumb Terminal : Knowledgebase : Running GPG from a cron or application