Merci à Denis Scherbakov !
Quand j'ai essayé votre script sur le nuage Hetzner, j'ai obtenu
debug1: Sending command: scp -v -t backup-20180420120524.tar.xz.enc
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 4168, received 2968 bytes, in 0.0 seconds
Bytes per second: sent 346786.6, received 246944.0
Mais seul un fichier sans contenu a été créé. Comme le contenu réel est déjà crypté avec openssl, nous n'avons pas besoin de scp. L'utilitaire linux ftp
a également de grandes capacités de tuyauterie. Voici donc ma solution (encore assez manuelle) :
#!/bin/bash
function join_e
{
for word in $*; do
echo -n "--exclude=$word "
done
}
# Directory and file inclusion list
ILIST=(
/home
)
# Directory and file exclusion list
ELIST=(
var/lib/postgresql
)
export OPASS=fileencryptionpassword
nice -n 19 bash -c \
"\
tar $(join_e ${ELIST[@]}) -cpvf - -C / ${ILIST[*]} \
| xz -c9e -T8 \
| openssl enc -aes-256-cbc -pass env:OPASS \
"
# decrypt with:
# cat backup.tar.xz.enc | openssl aes-256-cbc -d -pass env:OPASS | xz -dc | tar xv
# invocation procedure for ftp:
# $ ftp -np
# ftp> open storage.com
# ftp> user storageuser storagepass
# ftp> put "| bash ~/backup.sh" backup.tar.xz.enc