Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/03/2021, à 00:19

krzyzstof

[TUTO] Synchronisation Linux --> NAS Syno en local avec rsync en ssh

Bonsoir,

Après avoir pas mal galéré pendant plus de 4 jours à temps pleins dans la lecture de différents tutos en français et anglais pour synchroniser en local mon PC linux avec mon NAS DS414 avec la commande rsync et avec un cryptage clés public/privé, je livre ici mon tuto qui pourra peut-être en aider certains dans ce cheminement. Je précise que certains tutos existent (biblio m'ayant aidé à formuler mon propre guide en fin de tuto) mais certains ne sont plus compatibles avec les versions récentes de DSM, et enfin une grande majorité est orientée W$ et non Linux. Bien évidemment, ce tuto n'est pas parfait et peut-être amendé en fonction de vos connaissances respectives. Dernier point, j'ai opté pour la commande rsync car les applicatifs de Syno (principalement Drive) m'ont généré soit beaucoup de ralentissements, soit des lourdeurs de mise en oeuvre ou soit enfin des bugs...


Configuration

1) Serveur NAS
    (a) Synology DS414 (x volumes)
    (b) DSM v.6.2.3
2) Client Linux
    (a) Kubuntu 18.04
3) LAN
    (a) RJ45 cat.7 / Wifi désactivé


Préparation du NAS (serveur ssh et rsync)

Compte « Admin » désactivé
Compte utilisateur « Moi » activé en mode administrateur

1) Activer le service SSH :
    (a) Accéder à la page des paramètres du terminal sur votre périphérique Synology : DSM > Panneau de configuration > Terminal & SNMP > Terminal.
    (b) Cocher la case Activer le service SSH.
    (c) Spécifier un numéro de port pour les connexions SSH et enregistrer les paramètres. Certains préconisent (d'autres non) de remplacer le port 22 par défaut par un autre (ici 22222 pour l’exemple) afin de garantir une meilleure sécurité du système.

2) Activer le service rsync :
    (a) Accéder à la page des paramètres Services de fichier sur votre périphérique Synology : DSM > Panneau de configuration > Services de fichiers > rsync > Activer le service rsync
    (b) Dans la case « Port de chiffrement SSH », mettre le port spécifique que vous avez choisi précédemment. Attention, lorsque l’on clique sur « Activer le service rsync » et que le firewall du DSM est actif, ce dernier va créer des règles. Une fenêtre de notification apparaîtra à cet effet si vous avez validé l’option des notifications.
    (c) Vérifier que l’utilisateur a les permissions rsync : DSM > Panneau de configuration > Utilisateur > Le_nom_de_l’utilisateur (ici Moi) > Modifier > Applications> rsync (doit être coché)
    (d) Vérifier l’activation des ports dans le pare-feu du NAS :
         (i) Les ports rsync et « service terminal chiffré » (SSH) doivent être activés et le port SSH doit correspondre à celui choisi (par défaut 22, dans notre exemple 22222)
         (ii) Attention comme indiqué précédemment, l’activation du service rsync a normalement automatiquement créée des règles pour autoriser rsync. Dans mon cas, j’avais au préalable autorisé les règles pour rsync et ssh dans le firewall dans un profil personnalisé. Aussi, l’ajout automatique des règles lors de l’activation du service rsync ne me semblait pas utile puisque en doublon avec ceux existant déjà dans mon profil. Bien que les règles rsync et ssh soient exactement les mêmes que les miennes (même port, même protocole), la suppression des règles automatiques rend impossible (« denied ») la communication entre le client et le serveur. Soit c’est un bug DSM, soit je merdoume de mon côté mais impossible de trouver ce qui cloche dans mon profil firewall...
         (iii) Créer un dossier partagé de sauvegarde : DSM > Panneau de configuration > Dossier partagé > Créer
               (A) Donner un nom (ici « Synchronisation »), choisir un volume (ici "volume 1"), activer la corbeille
               (B) Donner les permissions « Lecture/Ecriture » pour votre profil (ici « Moi ») et interdire à tous les autres utilisateurs (« Pas d’accès »)


Préparation du PC linux (client ssh, rsync et clés de cryptage)

Le nom d'utilisateur du PC linux : krzyzstof

1) Par défaut rsync est installé sur tous les postes linux. Si tel n’était pas taper dans le terminal la commande :

sudo apt-get install rsync

2) Par défaut ssh client est installé sur tous les postes linux. Si tel n’était pas taper dans le terminal la commande :

sudo apt-get install openssh-client

3) Création des clés de cryptage
    (a) Taper dans le terminal :

ssh-keygen -t rsa -b 4096 -C "Clé ssh Moi"

où « rsa » correspond à l’algorithme de cryptage ; « 4096 » la force du cryptage ; « -C » permet d’insérer un commentaire (cet attribut et le commentaire sont optionnels, on peut donc écrire la ligne de commande sans cette partie).
    (b) Le terminal vous renseigne sur la création des clés public et privée. Il vous demande alors :
         (i) le dossier de destination où enregistrer les clés. Il vous propose un dossier par défaut (qu’il est conseillé de valider) du type : /home/moi/.ssh/id_rsa
         (ii) une phrase de passe (équivalent d’un mot de passe) afin de chiffrer la clé privée. Il est conseillé d’en donner une pour une meilleure sécurité même en local. Si vous ne voulez pas en inscrire une alors validez la question par « ENTREE », sinon renseignez votre clé (et ne l’oubliez pas, elle vous sera redemandé pour les connexions). Dans ce tuto, les instructions qui suivent prennent en considération l’existence d’une phrase de passe.
            (A) La clé publique (id_rsa.pub) et la clé privée (id_rsa) se trouve donc dans le dossier dit caché : /home/votre_profil/.ssh

(4) Envoi de la clé publique sur le NAS (serveur ssh)
     (a) Taper dans le terminal la commande de type :

ssh-copy-id -i id_rsa.pub votre_utilisateur_NAS@IP_local_NAS -p port_spécifique_ssh

         soit dans notre exemple fictif :

ssh-copy-id -i id_rsa.pub Moi@192.168.1.100 -p 22222

     (b) A la demande de mot de passe, donner le mot de passe de votre compte utilisateur NAS (et non de la phrase de passe de la clé de cryptage privée).
     (c) Avec son navigateur internet, se connecter au DSM et vérifier que dans le dossier du compte utilisateur (ici Moi), le dossier « .ssh/ » et le fichier « authorized_keys » ont été créés. Vérifier le contenu du ficher « .ssh/authorized_keys »
     (d) Revenir sur le Terminal Linux et faire un test de connexions en ssh crypté en tapant la commande de type :

ssh votre_utilisateur_NAS@IP_local_NAS -p port_spécifique_ssh

          soit dans notre exemple fictif :

ssh Moi@192.168.1.100 -p 22222

     (e) Donner cette fois la phrase de passe de votre clé de cryptage privée.
     (f) Vous êtes connecté si vous n’avez pas de message d’erreur* et que vous avez l’invite commande de type :

votre_utilisateur_NAS@Nom_du_NAS:~$

         soit dans notre exemple :

Moi@DS414:~$

        * si vous avez le message : « Connection closed by 192.168.1.100 port 22222 », c’est qu'il y a de fortes chances que vous avez été trop long à rentrer votre phrase de passe tongue


Processus de synchronisation

1) modèle théorique en mode ssh :

rsync "-e ssh -p numéro_port_ssh" choix_des_attributs /home/mondossier_source user@ip_du_serveur:/dossier/destination/

2) # ATTRIBUTS (en vert ceux retenus dans notre cas)
-a : archive ⇒ préserve les dates, permissions, etc … des fichiers. Inclus l'option récursivité. Option à utiliser quand on veut transférer des répertoires entiers avec leurs sous-répertoires en préservant toutes les caractéristiques des fichiers. Equivalent aux attributs groupés de -rlptgoD
# -D : préserve les périphériques
-e ssh -p numéro_port_ssh : utilise le protocole SSH avec un port ssh spécifique (si le port par défaut 22 a été configuré dans le serveur ssh, alors "-p numéro_port_ssh" est inutile. Si un port spécifique a été choisi, il faut alors mettre l'attribut -e ssh -p numéro_port_ssh entre guillemet, soit : "-e ssh -p numéro_port_ssh". Je suppose que cela doit être pour ne pas confondre avec l'attribut -p ci-dessous)
# -g : préserve le groupe
# -h : les chiffres produits sont dans un format de lecture lisible par les humains.
# -l : copie les liens symboliques comme liens symboliques. Est inclus dans l'option -a
# -L : remplace les liens symboliques par les fichiers référencés.
-n : simule la sauvegarde mais n'effectue aucune opération concrète de sauvegarde. Très intéressant pour simuler et vérifier les éventuelles erreurs.
# -o : mettre le propriétaire du fichier de destination identique à celui du fichier source
# -p : provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques aux permissions sur la source
-q : n'affiche que les lignes d'erreur lors du transfert. Ainsi si notre synchronisation nous retourne des erreurs de transfert à la fin du processus, le fait de rajouter -q et de relancer le backup permet d'afficher les seuls lignes de contrôle concernant les erreurs
# -r : la synchro est récursive (elle prend les sous-répertoires). Est inclus dans l'option -a
# -t : préserve les dates
# -v : verbeux (affichage de ce que fait la commande pendant qu'elle le fait).
# -z : compresse les fichiers (Limite la bande passante mais augmente l'utilisation processeur et le temps de transfert : inutile en réseau local ou avec très bon débit)
# --del : permet de supprimer les fichiers sur "destination" qui n'existent plus sur "source"
# --delete : --delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
--delete-after : à la fin du transfert, supprime les fichiers dans le dossier de destination ne se trouvant pas dans le dossier source.
--delete-excluded : si l’on a choisi des fichiers à exclure du transfert et qu’ils sont déjà présents dans le dossier de destination, ils seront effacés de la destination.
# --exclude="nom_de_dossier" (exclure des fichiers ou dossiers de la sauvegarde : rsync --exclude="nom_de_dossier" --exclude="- autre_nom_de_dossier" source/ destination/)
# --force : force la suppression de répertoires même non-vides
--ignore-errors : efface même s'il y a eu des erreurs E/S (IO error)
--progress : montre l'avancement pendant le transfert à la différence de -v
--stats : affiche quelques statistiques de transfert de fichiers, ce qui permet de vérifier l'efficacité de la sauvegarde

3) Notre synchro en mode simulation :

rsync "-e ssh -p 22222" -h --progress --stats -an --update --delete-after --delete-excluded --ignore-errors --exclude=**/*tmp*/ --exclude=**/*cache*/ --exclude=**/*Cache*/ --exclude=**~ --exclude=/mnt/*/** --exclude=/media/*/** --exclude=**/lost+found*/ --exclude=/var/run/** --exclude=/run/** --exclude=/proc/** --exclude=/dev/** --exclude=/sys/** --exclude=**/*Trash*/ --exclude=**/*trash*/ --exclude=/krzyzstof/test/** --exclude=/krzyzstof/.local/share/baloo/** /home/krzyzstof Moi@192.168.1.100:/volume1/Synchronisation

Pour info, les attributs et les exclusions correspondent à mes choix et à ma configuration, chacun est libre de modifier les paramètres et les dossiers. Ici par exemple le dossier "baloo" contient l'indexation par Linux KDE de tous mes documents sur mon PC. C'est très très lourd en termes de Go et inutile à synchroniser.

Nous avons rajouter l’option « --ignore-errors » car le transfert nous retournait l’erreur « IO error encountered -- skipping file deletion » malgré le fait que les permissions de lecture/écriture était bien accordé à l’utilisateur pour le dossier de destination ainsi que toute son arborescence. Bref, impossible d’effacer les fichiers sur la destination lors de la synchronisation. C’est un problème qui revient souvent dans les sujets de forums. Je n’ai pas très bien compris les raisons mais l’option « --ignore-errors » a été pensé expressément pour pallier ce problème.

4) Notre synchro en mode réel

rsync "-e ssh -p 22222" -h --progress --stats -a --update --delete-after --delete-excluded --ignore-errors --exclude=**/*tmp*/ --exclude=**/*cache*/ --exclude=**/*Cache*/ --exclude=**~ --exclude=/mnt/*/** --exclude=/media/*/** --exclude=**/lost+found*/ --exclude=/var/run/** --exclude=/run/** --exclude=/proc/** --exclude=/dev/** --exclude=/sys/** --exclude=**/*Trash*/ --exclude=**/*trash*/ --exclude=/krzyzstof/test/** --exclude=/krzyzstof/.local/share/baloo/** /home/krzyzstof Moi@192.168.1.100:/volume1/Synchronisation

5) Notre synchro en mode réel avec l'affichage des seuls lignes de contrôle comportant des erreurs de transfert

rsync "-e ssh -p 22222" -h -q --progress --stats -a --update --delete-after --delete-excluded --ignore-errors --exclude=**/*tmp*/ --exclude=**/*cache*/ --exclude=**/*Cache*/ --exclude=**~ --exclude=/mnt/*/** --exclude=/media/*/** --exclude=**/lost+found*/ --exclude=/var/run/** --exclude=/run/** --exclude=/proc/** --exclude=/dev/** --exclude=/sys/** --exclude=**/*Trash*/ --exclude=**/*trash*/ --exclude=/krzyzstof/NAS_DS414/** --exclude=/krzyzstof/.local/share/baloo/** /home/krzyzstof Moi@192.168.1.100:/volume1/Synchronisation

 

Sources d’information (non exhaustives) ayant aidé à ce tuto :

https://openclassrooms.com/fr/courses/4 … h#ss_part5
https://www.synology.com/fr-fr/knowledg … SSH_Telnet
https://doc.ubuntu-fr.org/rsync
https://doc.ubuntu-fr.org/tutoriel/sauv … avec_rsync
https://www.synology.com/en-us/knowledg … nology_NAS
https://man.developpez.com/man1/rsync/
https://www.synology.com/fr-fr/knowledg … file_rsync
https://www.youtube.com/watch?v=FZ9-_O9t814
https://www.wundertech.net/how-to-backu … ing-rsync/
https://doc.ubuntu-fr.org/ssh#configura … erveur_ssh
https://www.nas-forum.com/forum/topic/5 … via-dsm-6/
https://superuser.com/questions/516041/ … e-deletion

Dernière modification par krzyzstof (Le 03/03/2021, à 00:36)


Portable 1 : DELL Latitude 5320 Kubuntu 22.04.1 / Windows 10 pro (64 bits / 32 Go RAM / 1 To SSD)
Portable 2 : HP EliteBook 840 G4 - Kubuntu 20.04 / Windows 10 pro (64 bits / 32 Go RAM / 512 Go SSD)
Portable 3 : Samsung N220 - Linux Mint 18.3 Mate (32 bits)
Fixe : Custom (carte mère Asus A7V333 + carte graphique ATI Radeon 9600 XT) - Linux Mint 18.1 Mate (32 bits)

Hors ligne

#2 Le 09/03/2021, à 02:33

Compte supprimé

Re : [TUTO] Synchronisation Linux --> NAS Syno en local avec rsync en ssh

Salut.
Chouette.
Je crois qu'avec rsync tu peux passer un fichier exclude ce qui améliorera la lisibilité de ta commande.

rsync --exclude-from=ExclusionRSync source/ destination/ 

À+

Dernière modification par Compte supprimé (Le 09/03/2021, à 02:37)

#3 Le 10/03/2021, à 15:05

krzyzstof

Re : [TUTO] Synchronisation Linux --> NAS Syno en local avec rsync en ssh

Merci L_d_v_c@ smile
Oui, il existe bien la commande exclude, d'ailleurs j'en fais mention dans les attributs cités wink

Krzyzstof a écrit :

# --exclude="nom_de_dossier" (exclure des fichiers ou dossiers de la sauvegarde : rsync --exclude="nom_de_dossier" --exclude="- autre_nom_de_dossier" source/ destination/)

J'aurais pu l'utiliser, cela aurait peut-être simplifié ma ligne. Bon je t'avouerais que pour gagner du temps dans la réalisation de base de cette ligne de commande, je suis passé par le générateur de commande de Luckybackup tongue...que j'ai ensuite adapté à ma sauce.
Plus sérieusement, cela m'a permis de comprendre la structuration de la commande rsync wink

Dernière modification par krzyzstof (Le 10/03/2021, à 15:06)


Portable 1 : DELL Latitude 5320 Kubuntu 22.04.1 / Windows 10 pro (64 bits / 32 Go RAM / 1 To SSD)
Portable 2 : HP EliteBook 840 G4 - Kubuntu 20.04 / Windows 10 pro (64 bits / 32 Go RAM / 512 Go SSD)
Portable 3 : Samsung N220 - Linux Mint 18.3 Mate (32 bits)
Fixe : Custom (carte mère Asus A7V333 + carte graphique ATI Radeon 9600 XT) - Linux Mint 18.1 Mate (32 bits)

Hors ligne