Une des solution pour sauvegarder votre serveur consiste à utiliser les applications borg
Cette solution consiste à sauvegarder son serveur yunohost sur un autre serveur yunohost. Il y a donc deux applications, une application “client” ( Borg Backup App ) et une application “serveur” ( Borg Server ).
Borg Server a besoin d'un clé publique générée à l'installation de Borg Backup App. On commence donc par installer l'application cliente.
Dans mon exemple, je vais sauvegarder le serveur quercus sur fagus.
J'installe l'application cliente, Borg Backup App, sur quercus.
J'ai besoin :
Une paire de clé ssh est générée à l'installation de l'application.
root@quercus:~# ls -al /root/.ssh/ total 16 drwx------ 2 root root 4096 Aug 12 19:37 . drwx------ 4 root root 4096 Aug 11 07:23 .. -rw------- 1 root root 0 Aug 8 09:15 authorized_keys -rw------- 1 root root 411 Aug 12 19:37 id_borg_ed25519 -rw-r--r-- 1 root root 101 Aug 12 19:37 id_borg_ed25519.pub root@quercus:~# cat /root/.ssh/id_borg_ed25519.pub ssh-ed25519 AAAA(...)
Cette clé est également envoyée par mail à l'administrateur du serveur.
Une fois la partie cliente installée, passons à l'installation de la partie serveur, l'application Borg Server, sur fagus.
Il faudra configurer :
L'application crée un utilisateur et place la clé ssh publique dans authorized_keys, avec une limitation sur la commande pouvant être utilisée :
root@fagus:/home# cat /home/quercus/.ssh/authorized_keys command="borg serve --storage-quota 500G --restrict-to-repository /home/quercus/backup",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 AAAA(...)
Sur le serveur à sauvegarder, où on a installé l'application Borg Backup App, on peut manuellement lancer une sauvegarde en démarrant le service :
# systemctl start borg
Pour vérifier que tout fonctionne bien :
root@fagus:~# borg list /home/quercus/backup/ Enter passphrase for key /home/quercus/backup: auto_conf_16_08_20_15:36 Sun, 2020-08-16 15:36:46 [dca3fdacfe470ef02a1a8b878944ab9fedb0468f4823891d8c0e2419701b2d32] auto_data_16_08_20_15:36 Sun, 2020-08-16 15:37:04 [8992608fb919d66a54f1c0412a8a88b471cda229a66f154dc4fc945076f8d8ff] auto_borg_16_08_20_15:38 Sun, 2020-08-16 15:38:29 [38b1f269210021a671be08e86a85a120b3664a321892d11caad555cab6d23e53] auto_borgserver_16_08_20_15:38 Sun, 2020-08-16 15:38:43 [7101a5803175dc31d4f54c33b4ecab95d225532faa0240fd84d492b265c05ac5] auto_dokuwiki_16_08_20_15:38 Sun, 2020-08-16 15:39:04 [dbaf920f37f399b5186194a1d93973771e15e10d47da352514ddcf895664cc07] auto_my_webapp_16_08_20_15:44 Sun, 2020-08-16 15:44:30 [3aa0379bcf79a43d22bed9d770c8192afbd859306ddc864fc903759371ada9bb] auto_redirect_16_08_20_15:44 Sun, 2020-08-16 15:44:49 [992fc9016a91b54b82f46e65aeb95e203099703634211ff16e0e7841854f9161] auto_shaarli_16_08_20_15:45 Sun, 2020-08-16 15:45:10 [8fe1ceed03878c1305c87ea9f7e3630e826a487580538fc190a1e17d9e318ddf] root@fagus:~# borg info /home/quercus/backup/ Enter passphrase for key /home/quercus/backup: Repository ID: 8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec Location: /home/quercus/backup Encrypted: Yes (repokey) Cache: /root/.cache/borg/8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec Security dir: /root/.config/borg/security/8fdd120542cee6ae4dd6d1694e73175e978977b523ed83188c9da91ccc12b0ec ------------------------------------------------------------------------------ Original size Compressed size Deduplicated size All archives: 2.71 GB 2.65 GB 2.32 GB Unique chunks Total chunks Chunk index: 18749 25990
Quelques pistes si ça ne fonctionne pas :
admin@quercus:~$ ls -al /var/log/backup* -rw-r--r-- 1 root root 18317 Aug 13 00:01 /var/log/backup_borg.err -rw-r--r-- 1 root root 0 Aug 12 20:53 /var/log/backup_borg.log
Depuis la mi-mai 2021 et la version “1.1.16~ynh20”, les logs sont dans un sous-dossier :
root@artanux:/home/admin# ls -al /var/log/borg/ total 228 drwxr-xr-x 2 borg borg 4096 May 24 09:49 . drwxr-xr-x 25 root root 12288 May 24 00:00 .. -rw-r--r-- 1 root root 13517 May 15 00:06 210515_0000.err -rw-r--r-- 1 root root 7326 May 15 00:06 210515_0000.log (...)
# systemctl status --lines 100 borg ● borg.service - Run backup borg Loaded: loaded (/etc/systemd/system/borg.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2020-08-13 00:01:16 UTC; 9h ago Main PID: 31654 (code=exited, status=1/FAILURE) Aug 13 00:00:03 quercus systemd[1]: Starting Run backup borg... Aug 13 00:00:05 quercus backup-with-borg[31654]: ls: cannot access '/etc/yunohost/hooks.d/backup/': Aug 13 00:00:07 quercus slapcat[31880]: DIGEST-MD5 common mech free
Comme je sauvegarde Fagus sur Quercus et inversement, je me suis un peu emmêlé avec les clés SSH… Il faut penser à vérifier que la clé publique du client corresponde à ce qui est dans authorized_keys sur le serveur :
root@quercus:~# ls -al /root/.ssh/ total 20 drwx------ 2 root root 4096 Aug 12 20:53 . drwx------ 5 root root 4096 Aug 14 07:40 .. -rw------- 1 root root 0 Aug 8 09:15 authorized_keys -rw------- 1 root root 411 Aug 12 19:37 id_borg_ed25519 -rw-r--r-- 1 root root 101 Aug 12 19:37 id_borg_ed25519.pub -rw-r--r-- 1 root root 444 Aug 12 20:53 known_hosts
root@fagus:~# ls -al /home/quercus/.ssh/authorized_keys -rw-r--r-- 1 root root 264 Aug 12 21:12 /home/quercus/.ssh/authorized_keys
root@fagus:~# tail -f -n 20 /var/log/backup_borg.err Remote: Remote: Remote: Server : 465812 Remote: IPv4 : WW.XX.YY.ZZ Remote: IPv6 : WWWW:XXXX:YYYY:ZZZZ Remote: Hostname : machin.com Remote: Remote: bash: /usr/local/bin/borg: Permission denied Connection closed by remote host. Is borg working on the server?
Borg ne peut pas être lancé par l'utilisateur quercus
sur le serveur fagus
.
root@fagus:~# sudo -u quercus borg --help sudo: unable to execute /usr/local/bin/borg: Permission denied
La solution consiste à vérifier les droits pour lancer Borg sur le serveur fagus
:
root@fagus:~# ls -al /usr/local/bin/borg -rwxr--r-- 1 root staff 69 Aug 10 14:03 /usr/local/bin/borg root@fagus:~# chmod 755 /usr/local/bin/borg
Une fois les droits réglés, ça marche correctement!
Ma passphrase, générée automatiquement par bitwarden, contenait “$texte*”, qui a été interprété comme une variable vide. Un bout de la passphrase a donc disparu.
J'ai ajouté mon expérience sur cette issue Github.
Le problème se situe dans le fichier suivant :
# cat /etc/yunohost/hooks.d/backup_method/05-borg_app (...) BORG_PASSPHRASE="RGjauGbbg6d$jj77g*piabfbfGedE" (...)
(La passphrase a été changée évidemment!)
La passphrase utilisée réellement pour chiffrer le backup, dans ce cas-ci : RGjauGbbg6d*piabfbfGedE
Je recevais pas mal d'alertes de fail2ban à propos de tentative pour se connecter à SSH depuis le port standard. J'ai donc changé le port SSH sur mes serveurs (en changeant dans le fichier /etc/ssh/sshd_config
).
Évidemment, ça pète la configuration Borg et celui-ci n'arrive plus à se connecter au serveur distant.
Il y a deux lignes à changer dans le fichier
# cat /etc/yunohost/hooks.d/backup_method/05-borg_app | grep ssh if ssh-keygen -F "monserveur.com" >/dev/null ; then BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=yes " BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -oStrictHostKeyChecking=no "
Il faut ajouter l'information pour qu'il utilise le bon port :
# vim /etc/yunohost/hooks.d/backup_method/05-borg_app BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -p 1234 -oStrictHostKeyChecking=yes " BORG_RSH="ssh -i /root/.ssh/id_${app}_ed25519 -p 1234 -oStrictHostKeyChecking=no "
(1234
est un exemple de port, ce n'est pas celui que j'utilise.)
Il faut que je remonte ce bug sur le github du projet.