Backupskript als cronjob

Alternative zum speichern der Passphrase

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Backupskript als cronjob
Hallo,
ich habe mir ein Backupscript geschrieben, dass mir mit duplicity und gnupg verschlüsselte inkrementelle Backups erzeugt. Ich möchte das Skript als cronjob (bzw. anacron job) laufen lassen. Jetzt brauche ich für gnupg ein Passwort, welches ich im Skript pielsweise mit PASSPHRASE=“Mensch_ist_es_geschickt_ein_Passwort_in_einer_Datei_zu_speichern” setzen könnte. Das möchte ich aber nicht! Gibt es eine geschickte Variante eine automatisierte Verschlüsselung in einem Skript zu realisieren ohne das Passwort in plain-text dort zu hinterlegen ? (wie gesagt ich möchte das Skript eigentlich ohne interaktion als anacronjob laufen lassen).
Ich wäre euch dankbar wenn ihr mir da Tips geben könntet.

Vielen Dank


Ja, Asymmetrische Kryptographie. Du kannst duplicity statt eines Kennworts auch mittels --encrypt-key einen öffentlichen GPG-Schlüssel geben, dann benötigt man für die Verschlüsselung kein Passwort. Für die Langversion davon: http://www.dewinter.com/gnupg_howto/english/GPGMiniHowto.html


Danke für die schnell Antwort.
Ja, das war mein ursprünglicher Ansatz. Das Skript sah so aus:[code]

#!/bin/sh
echo “Diese Datei verhindert das Herunterfahren/Neustarten des Laptops während dieses Skript läuft” > /home/user0/.config/herbstluftwm/scripts/backup_script/interupt.block

##Define Vars##
export GNUPGHOME=/home/xxx/.gnupg
_gpg_key=‘ABCD1234’
_target=‘file:///backups’
_duplicity=‘/usr/bin/duplicity’
_src=‘/’
_exclude=‘–exclude /sys --exclude /dev --exclude /media --exclude /proc/ --exclude /tmp/ --exclude /mnt/ --exclude /backups/ --exclude /var/cache/apt --exclude /home/xxx/.cache/ --exclude /home/xxx/.local/share/Trash/ --exclude /home/xxx/.thumbnails’
#clean up
echo “starte clean up”
#export PASSPHRASE=“”
$_duplicity cleanup --force --encrypt-key=“${_gpg_key}” ${_target}
##rotieren der backups
echo “entferne alte backups”
$_duplicity remove-older-than 30D --encrypt-key=“${_gpg_key}” ${_target}
echo “Starte backup”
$_duplicity ${_exclude} ${_src} --encrypt-key=“${_gpg_key}” --full-if-older-than 30D ${_target}
echo $(date): Backup completed! >> /home/xxx/.config/herbstluftwm/scripts/backup_script/backup.log
rm -f /home/xxx/.config/herbstluftwm/scripts/backup_script/interupt.block
[/code]

Das Problem ist - sofern ich es richtig verstanden habe :smiley: - dass Cron keine tty startet und deshalb gnupg einen Fehler wirft.
Wärend dieses Skript aus der Komandozeile aufgerufen wunderschön läuf schmeist es mir bei einem aufruf über anacron folgende Fehlermeldung:

       /usr/lib/python2.7/getpass.py:83: GetPassWarnin: Can not control echo on the terminal.
  passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
GnuPG passphrase: Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1509, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1503, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1352, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1381, in do_backup
    sync_archive(decrypt)
  File "/usr/bin/duplicity", line 1153, in sync_archive
    globals.gpg_profile.passphrase = get_passphrase(1, "sync")
  File "/usr/bin/duplicity", line 173, in get_passphrase
    pass1 = getpass_safe(_("GnuPG passphrase:")+" ")
  File "/usr/bin/duplicity", line 71, in getpass_safe
    return getpass.getpass(message)
  File "/usr/lib/python2.7/getpass.py", line 83, in unix_getpass
    passwd = fallback_getpass(prompt, stream)
  File "/usr/lib/python2.7/getpass.py", line 118, in fallback_getpass
    return _raw_input(prompt, stream)
  File "/usr/lib/python2.7/getpass.py", line 135, in _raw_input
    raise EOFError
EOFError

Ich nehme an, dass ich durch den Aufruf über Cron eben kein normales Terminal mit stdout und stdin bekomme und folglich dieser Fehler auftritt.
Mein Freund DuckDuckGo konnte mir dazu leider auch nicht weiter helfen.


Das kann man normalerweise mit expect(1) lösen, ist bissl fummelig, aber tut :slight_smile:


https://bugs.launchpad.net/duplicity/+bug/758077


Danke für die Antworten.
Ich habe “meinen” Fehler gefunden. Duplicity ignoriert die Übergabe des Public-Keys in soweit, als dass es dennoch nach einer Passphrase fragt. Dann aber bei der Ver/-Entschlüsselung doch korrekterweise den Public-Key verwendet. Lösen lässt sich das Problem einfach wenn man PASSPHRASE=“” exportiert :rolleyes:.
Nochmal vielen Dank an alle.


Für duplicity kann ich duply als Wrapper empfehlen. Macht das ganze etwas schmerzfreier und habe ich auch aktuell im Einsatz mit GPG-Verschlüsselung und automagisiert in einem Cronjob.