Jak spustit gpg z skriptovacího jazyka cron?

hlasů
26

Mám skript, který má část, která vypadá, že:

for file in `ls *.tar.gz`; do
  echo encrypting $file
  gpg --passphrase-file /home/$USER/.gnupg/backup-passphrase \
    --simple-sk-checksum -c  $file
done

Z nějakého důvodu, když jsem tento skript spustit ručně, funguje naprosto v pořádku a všechny soubory jsou šifrovány. Mám-li spustit tento jako cron, echo $filefunguje (I see „šifrování <file>“ v logu), ale soubor nedostane šifrované a gpg tichý selže s žádný výstup stdout / stderr.

Nějaké stopy?

Položena 02/09/2008 v 16:58
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
25

Ukazuje se, že odpověď byla jednodušší, než jsem čekal. K dispozici je --batchparametr chybí, gpg pokusí číst z / dev / tty, která nemá pro cron neexistuje. Ladění, které jsem použil --exit-on-status-write-errorparam. Ale pouze, že jsem se nechal inspirovat stavu výjezdu 2, hlásí ozvěnou $?jako Cd-Man navrhl.

Odpovězeno 02/09/2008 v 18:48
zdroj uživatelem

hlasů
7

V mém případě převýšení gpg najít domov dir pro použití klíče:

gpg: žádná výchozí tajný klíč: No tajný klíč

gpg: 0003608.cmd: znaménko + šifrování se nezdařila: Bez tajného klíče

Tak jsem přidal --homedir /root/.gnupg. Konečný příkaz může vypadá

echo 'heslo' | gpg -vvv --homedir /root/.gnupg --batch --passphrase-fd 0 --output /usr/share/file.gpg --encrypt --sign /usr/share/file.tar.bz2

Odpovězeno 02/10/2011 v 07:20
zdroj uživatelem

hlasů
1

Měli byste se ujistit, že GPG je v cestě, když běží Cronjob. Váš nejlepší odhad by se dostat celou cestu GPG (o tom which gpg) a běží to pomocí úplnou cestu (například /usr/bin/gpp...).

Některé další tipy ladění:

  • výstupní hodnota $?po spuštění GPG (asi takto: echo „$?“). To vám dává výstupní kód, který by měl být 0, pokud se zdařilo
  • přesměrovat stderr na SVS a pak přesměrování STDOUT do souboru, prohlédnout nějaké chybové zprávy, které by mohly dostat tištěné (to lze provést příkazového řádku: /usr/bin/gpg ... 2>&1 >> gpg.log)
Odpovězeno 02/09/2008 v 17:15
zdroj uživatelem

hlasů
0

V mém případě: „gpg: dešifrování selhalo: Bad klíč relace“.

Zkoušel přidání / usr / bin / gpg, kontrola verze, nastavení --batch, nastavení --home (s /root/.gnupg a /home/user/.gnupg) a vše nefungovalo.

/usr/bin/gpg -d --batch --homedir /home/ec2-user/.gnupg --no-mdc-warning -quiet --passphrase "$GPG_PP" "$file"

Ukázalo se, že cron na AWS Čahoun například potřeba proměnná prostředí se používá k nastavení --passphrase $ GPG_PP. Cron teď:

0 15 * * * $(source /opt/elasticbeanstalk/support/envvars && /home/ec2-user/bin/script.sh >> /home/ec2-user/logs/cron_out.log 2>&1)
Odpovězeno 14/12/2017 v 19:08
zdroj uživatelem

hlasů
0

@skinp Cron úlohy jsou prováděny sh, zatímco většina moderních Unixes používat bash nebo ksh pro interaktivní přihlášení. Největším problémem (podle mých zkušeností), že sh nerozumí věci jako:

export PS1='\u@\h:\w> '

které je třeba změnit, aby:

PS1='\u@\h:\w> '
export PS1

Takže pokud cron spustí shell skript, který definuje proměnné prostředí s použitím prvního syntaxe, před spuštěním nějaký jiný příkaz, druhý příkaz nebude nikdy provést, protože sh bomby ven snaží definovat proměnné.

Odpovězeno 04/09/2008 v 00:04
zdroj uživatelem

hlasů
0

Jsem narazil na tento problém jednou.

Nemohu vám opravdu říct proč, ale nemyslím si cron spustí se stejným proměnné prostředí jako uživatel dělat.

Vlastně jsem měl exportovat dobrou cestu pro mé programy dobře vykonávat. Je gpg alespoň pokouší provést?

Nebo jsou soubory, které se snaží encypt vlastně v aktuálním adresáři, když cron spustí?

Možná, že se snaží spustit echo whereis gpga echo $PATHve skriptu zjistit, jestli je to součástí ... pracoval pro mě.

Odpovězeno 02/09/2008 v 17:09
zdroj uživatelem

hlasů
0

ujistěte se, že uživatel, který je spuštěn cron má potřebná oprávnění k zašifrování souboru.

Odpovězeno 02/09/2008 v 17:02
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more