Synchroniser sa Seedbox vers son NAS Synology avec Rsync

Vous allez découvrir dans ce tutoriel comment synchroniser automatiquement les fichiers Torrent téléchargés par votre Seedbox vers votre NAS Synology. Ainsi plus besoin de Filezilla ou WinSCP pour récupérer vos fichiers ils sont directement accessibles avec vos applications Synology habituelles, les bien nommées DS File, DS Audio, DS Photo, ou DS Vidéo. Ainsi même loin de chez vous, depuis votre smartphone vous pouvez lancer un téléchargement de Torrent depuis l’interface Web du client Torrent de votre Seedbox, et quelques minutes après lancer l’application DS File pour accéder au fichier fraîchement téléchargé. Cool non ?

Ce tutoriel aurait aussi pu s’appeler d’une manière plus générale « Comment synchroniser automatiquement un répertoire entre deux serveurs Linux » ou encore d’une manière plus explicite « Comment copier automatiquement les fichiers Torrents téléchargés avec une Seedbox avec un NAS Synology », tant les principes peuvent s’appliquer à d’autres usages.

Sommaire

Ce tutoriel nécessite d’être un minimum structuré, car bien que cela ne soit pas (si) compliqué, dès que l’on touche à Linux le temps passe vite …

Dans ce tutoriel nous allons réaliser les actions suivantes:

  1. Autoriser votre NAS Synology à accepter les connexions SSH par clé publique / privé. En effet le but est de synchroniser automatiquement le répertoire de votre Seedbox vers votre NAS, il faudra donc le faire sans taper de mot de passe et sans sacrifier la sécurité de votre NAS en laissant le mot de passe en clair dans un script par exemple. Donc rien ne vaut une bonne paire de clé Publique / Privé pour sécuriser la connexion et l’authentification.
  2. Activer Rsync sur votre NAS Synology. Rsync c’est l’outil de transfert de fichiers par excellence sous Linux. Un peu l’équivalent de Robocopy sous Windows. Bonne nouvelle, Rsync est déjà implémenté sur Synology, et oui Synology est un système Linux à part entière. Il suffit juste de l’activer dans l’interface d’administration.
  3. Activer Rsync sur votre Seedbox. De la même manière Rsync doit déjà être déployé sur votre Seedbox mais au cas où, selon votre distribution, je vous montre comment l’installer et l’activer.
  4. Lancer un script de synchronisation automatique.

Synchroniser sa Seedbox vers son NAS Synology avec Rsync

Environnement utilisé pour le tutoriel

Oui il est important de vous décrire l’environnement qui a permis de monter ce tutoriel afin que vous puissiez l’adapter au cas où le votre diffère. Je tiens à préciser que cet article, comme la plupart de mes articles, sera actualisé le plus régulièrement possible.

  • Un NAS Synology DS215j avec DSM 6.x
  • Une Seedbox ! J’ai utilisé pour ce tuto un serveur VPS sous Debian 8 « Jessie » loué chez OVH à 2,99€ HT sur lequel j’ai installé le client Torrent Deluge.
  • Tout a été réalisé depuis ma station de travail DELL sous Windows 10 confortablement installé dans mon canapé.
  • PuTTY pour faire de la ligne de commande sur ma Seedbox ET mon Synology
  • WinSCP pour avoir une vue graphique des systèmes de fichiers sous Linux car je ne suis pas un pro de Linux et du coup je me permet d’éditer mes fichiers de conf Linux depuis mon Windows via WinSCP plutôt qu’avec VI en ligne de commande depuis PuTTY. Les puristes vont hurler mais je privilégie le gain de temps
  • Le navigateur Chrome pour accéder à l’interface admin de mon NAS Synology.

Note : Pour anticiper les éventuels commentaires sur le ‘pourquoi un VPS pour une Seedbox’ sachant que les VPS sont très limités en espace disque par rapport à un serveur dédié, je répond parce que je ne voulais pas compromettre mon serveur dédié Dedibox chez Online pour le tuto. C’est une excellente occasion pour dire qu’un VPS fait une très bonne Seedbox pour qui n’aurait pas besoin d’un espace disque colossal. Avec un SSD de 10GB pour une offre de 2,99€ HT cela vous fait quand même pas mal de place pour gérer quelques téléchargements, surtout si ceux ci sont systématiquement synchronisés sur votre Synology. Le message est passé 😉

Préparatifs

  1. Ouvrez une console PuTTY sur votre Seedbox et enregistrez les paramètres pour gagner du temps ensuite.
  2. Ouvrez une session WinSCP sur votre Seedbox et enregistrez ….. bla bla bla
  3. Lancez l’interface admin de votre NAS Synology dans votre navigateur … aux côtés de mon tutoriel.

Mettre en place l’authentification SSH par clé publique / privée sur le Synology

Activer la console SSH sur le NAS Synology

  1. Activez le SSH depuis l’interface administration du Synology en vous rendant dans le Panneau de configuration > Terminal & SNMP
  2. Activez le service Accueil utilisateur via le Panneau de configuration > Utilisateur > Avancé. Il est normalement déjà activé et c’est ce qui permet d’avoir un répertoire Home sur votre NAS. Le répertoire Home sera utilisé pour stocker la clé SSL qui autorisera votre Seedox à se connecter à votre Synology. 

Permettre l’authentification par Clé SSL sur le NAS Synology

Maintenant que l’accès SSH est activé sur le NAS nous allons pouvoir y activer l’authentification par clé Publique / Privée.

  1. Connectez vous à votre Synology en SSH depuis la console PuTTY de votre Seedbox, c’est l’occasion de vérifier que la connexion SSH vers NAS fonctionne depuis votre Seedbox. Connectez vous avec le compte Admin obligatoirement, si vous aviez désactivé le compte Admin par défaut de votre Synology il faut donc temporairement le réactiver.
    ssh admin@ip_synology

    Remplacez ip_synology par l’adresse IP de votre NAS Synology

  2. Octroyez vous les droits avancés du compte root via la commande suivante :
    sudo -i
  3. Editer le fichier /etc/ssh/sshd_config avec l’éditeur VI via la commande suivante :
    vi /etc/ssh/sshd_config

    Utiliser VI ne s’improvise pas, c’est un pur éditeur en mode console. Si vous n’êtes pas à l’aise je vous renvoie vers un tutoriel simple de VI.

  4. Retirer le # sur les trois lignes suivantes afin qu’elles ne soient plus en commentaire et sortez de VI en tapant :wq (et oui ça ne s’invente pas …) :
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

    Pour vous rassurer, c’est la seule l’opération réellement « intrusive » que vous allez faire sur votre Synology, le reste sera plus basique. Nous venons simplement d’autoriser le Synology à accepter des connexions via des clés SSL. Enregistrez vos modifications et sortez de VI en pressant successivement les 3 touches :wq (: pour rentrer une commande, w comme Write, q comme Quit)

  5. Sortez de la session root du Synology via la commande Exit.
    root@NAS:~$ Exit

    Vous obtenez le résultat suivant :

    logout
    admin@NAS:~$
  6. Sortez maintenant de la session Admin du Synology, en tapant une nouvelle fois la commande Exit.
    admin@NAS:~$ Exit

    Ce qui vous ramènera à la session root de votre Seedbox.

    logout
    Connection to 82.xxx.xxx.xx closed.
    root@vps35xxxx:~#

Générer les clés SSL sur la Seedbox et transférer la clé publique sur le NAS

Nous allons générer une paire de clé SSL sur la Seedbox et la transférer sur le NAS Synology. Une fois en possession de cette clé le NAS sera en mesure d’accepter les connexions en provenance de la Seedbox sans authentification. Nous établissons en quelque sorte une relation de confiance unidirectionnelle entre les 2 systèmes. Il faudrait faire l’opération dans l’autre sens pour que le Synology se connecter sans mot de passe à la Seedbox. Vous pigez le principe ?

  1. Depuis la session root de votre Seedbox générez les clés SSL de votre Seedbox grâce à la commande ssh-keygen suivante :
    ssh-keygen -t rsa

    Pressez 3 fois la touche Entrée pour générer la paire de clé. Si une paire de clé a déjà été créé sur votre serveur pour un autre usage le prompt vous propose de l’écraser. Bien sur si la paire de clé existante est déjà utilisée, annulez l’opération et passez à l’étape suivante pour utiliser la paire existante.

  2. Copiez la clé SSL sur votre NAS Synology avec la commande suivante ou IP_Synology correspond à l’adresse de votre serveur Synology. C’est la dernière fois que vous aurez besoin de vous authentifier car après tout se fera via les clés 😉
    ssh-copy-id admin@IP_Synology

    Vous pouvez constater dans le partage /homes/admin/ contient un répertoire .ssh qui contient votre la clé SSL de votre Seedbox. Vous pouvez même éditer le fichier authorized_keys en question.

La clé SSL de votre Seedbox est bien copiée sur le NAS

Tester l’authentification le fonctionnement de l’authentification SSL

  1. Depuis la console SSH de votre Seedbox connectez vous à votre NAS, comme au début du tutoriel.
    ssh admin@ip_synology

    Remplacez ip_synology par l’adresse IP de votre NAS Synology. Vous devez désormais être connecté sans avoir eu besoin de rentrer votre mot de passe.

  2. Si jamais ça ne fonctionne pas et que votre mot de passe est demandé, connectez vous et passez les commandes suivantes afin de changer les droits sur le répertoire contenant les clés sur le NAS Synology.
    chmod 755 /volume1/homes/admin
    chmod 700 /volume1/homes/admin/.ssh
    chmod 644 /volume1/homes/admin/.ssh/authorized_keys

Cette fois ça marche ? 😉 Nous pouvons passer à la suite, activer Rsync sur le Synology et sur la Seedbox pur enfin pouvoir planifier l’exécution d’un script de copie de fichiers Torrent entre votre Seedbox et votre NAS.

Note : J’oubliais, vous pouvez désormais désactiver l’accès à la console SSH sur votre Synology dans Panneau de configuration > Terminal & SNMP. En effet désormais c’est Rsync qui va communiquer avec votre Synology via la clé SSL. 

Activer le service Rsync son votre Synology

  1. Rendez vous sur votre console d’administration du Synology, dans le Panneau de configuration > Services de fichiers > rsync. Cochez la case Activer le service rsync.

Activation du service Rsync sur le Synology

Un partage NetBackup doit apparaître dans les dossiers partagés, vous ne serez pas obligé d’utiliser ce répertoire pour copier les Torrents depuis votre Seedbox, mais puisque ce répertoire est créé et que l’on ne peut pas le supprimer sans désactiver le service Rsync (ne me demandez pas pourquoi …), j’ai personnellement pris le parti de l’utiliser pour mes transferts.

Activer Rsync sur le Synology créé un partage par défaut … pourquoi pas

Activer Rsync son votre Seedbox

  1. Connectez à votre Seedbox en PuTTY et installez Rsync l’aide de la commande suivante.
sudo apt-install rsync

Il n’y a rien à faire de plus côté Seedbox. On passe à la dernière étape !

Mettre en place le script Rsync pour transférer vos fichiers / torrents

Création du script de copie et test de fonctionnement

Je vous propose de mettre en place une solution de transfert toute simple. Nous allons lancer un script qui va se contenter de copier le contenu de votre répertoire de téléchargement de Torrents sur votre Seedbox vers un répertoire de votre NAS Synology. La copie se fera de manière incrémentale bloc, cela signifie qu’un fichier déjà copié ne sera pas recopié à chaque fois et même mieux, si le fichier source est légèrement modifié, seule les différences seront transférées.

Voilà c’est simple mais efficace. Le but est de rapatrier les fichiers et ça marche très bien.

J’ai trouvé beaucoup d’autres scripts sur le net, certains gèrent la suppression du fichier source dès qu’il est copié, pourquoi pas, mais quand on télécharge des Torrents avec des trackers privés comme T411, Elite Trackers et compagnie, vous devez laisser le Torrent en partage pendant quelques jours pour que votre ratio de téléchargement reste correct. Donc je vous recommande plutôt de supprimer vous même vos Torrents de temps en temps.

Copiez / collez le script suivant dans un fichier rsync.sh placé par exemple dans le répertoire /root/scripts de votre Seedbox. Je vous recommande vivement de passer par WinSCP pour faire ça simplement en mode graphique. Sinon depuis PuTTY, faut passer par du VI et autre NANO et c’est vite très pénible. En tout cas je suis tout sauf un expert Linux, je cherche donc la simplicité.

#!/bin/bash
rsync -av --inplace --rsh='ssh -p22' /var/lib/deluge/Downloads/complete/ admin@ip_synology:/volume1/NetBackup

Remplacez ip_synology par l’adresse IP de votre NAS Synology.

WinSCP évite de faire de la ligne de commande pour des trucs simples.

Pour tester que le script fonctionne correctement lancez le manuellement via la commande suivante :

root@vps35xxxx:~# bash /root/scripts/rsync.sh

Génial ça fonctionne, la copie des fichiers a démarrée et s’est terminée avec succès !

sending incremental file list
Parenthese.2016.FRENCH.HDRip.XviD-EXTREME.www.torrent9.biz.avi
 717,019,454 100% 2.31MB/s 0:04:56 (xfr#1, to-chk=0/3)

sent 412,309,080 bytes received 187,667 bytes 1,324,227.12 bytes/sec
total size is 743,007,045 speedup is 1.80

Exécuter la tâche automatiquement

Votre script fonctionne, c’est une bonne chose, il ne reste plus qu’à l’exécuter automatiquement. Encore une fois plusieurs méthodes sont possibles :

Méthode 1: Soit vous planifiez l’exécution du script directement dans le client Torrent de votre Seedbox : Transmission, Deluge ou rTorrent, pour ne citer que les meilleurs. Avec cette solution il est possible de lancer la commande dès qu’un Torrent a terminé son téléchargement. Voici comment procéder sur Deluge par exemple.

Le module Execute de Deluge permet de lancer des scripts

Un moyen simple de lancer votre tâche de copie dès qu’un Torrent est téléchargé

Méthode 2: Soit vous planifiez une tâche planifiée CRON sur le Linux de votre Seedbox. Du coup vous n’avez pas de dépendances avec le client Torrent et le script s’exécute tous les X temps.

Lancez la planificateur CRON sur votre Seedbox :

 crontab -e

Définissez votre tâche planifiée : minute heure jourdumois mois jourdelasemaine /chemin/du/script.

Dans cet exemple la tâche s’exécute tous les 5 minutes

*/5 * * * * /root/scripts/rsync.sh

Dans celui ci exemple la tâche s’exécute tous les 5 minutes entre 20 heures et 8 heures du matin

*/5 20-8 * * * /root/scripts/rsync.sh

Je vous laisse choisir la méthode qui vous convient le plus. Je préfère personnellement la méthode 2 qui d’une part est plus généraliste, et qui d’autre part sera plus efficace en cas de problème réseau ou système, puisque la copie sera relancée périodiquement.

Conclusion

J’ai passé quasiment une journée complète à faire fonctionner la partie SSL sur le Synology car aucun tuto trouvé sur Internet n’abordait le fait qu’il faille modifier un fichier système sur le Synology pour faire fonctionner l’authentification sans mot de passe. A se demander si les tutos sont vraiment testés … Bref je rend à César ce qui appartient à César car j’ai trouvé la solution pour le SSL sur le site Chainsaw on a Tire Swing dans l’article SSH into your Synology DiskStation with SSH Keys que j’ai du découvrir je ne sais pas comment au moment ou j’étais prêt à abandonner.

J’ai refais le tutoriel en repartant de zéro, avec un VPS réinitialisé et un client Deluge tout neuf afin d’être certain que ça fonctionne. Si vous suivez scrupuleusement le tuto ça devrait fonctionner du premier coup. Maintenant n’hésitez pas à me faire un retour si vous rencontrez des difficultés, j’essaierai de vous aider.

5 thoughts on “Synchroniser sa Seedbox vers son NAS Synology avec Rsync

  1. Merci beaucoup pour ce tuto j’ai réussi du 1er coup !
    depuis le temps que je cherchait a récupérer sur mon syno depuis ma seedbox de manière automatique je suis ravi 🙂

  2. Excellent tuto, merci, cela correspond tout à fait à ce que je voulais mettre en place du coup j’ai gagné pas mal de temps 😉

  3. Bonsoir et merci pour ta contribution Mathieu.

    Effectivement l’accumulation de processus rsync n’est pas super clean et peut même finir par ralentir le NAS.

    OC.

  4. Bonjour,
    Merci pour cet article !

    J’ai un peu modifié le script pour éviter qu’il ne se lance en parallèle. En effet si la synchronisation met plus de 5 minutes, on voit plusieurs instructions rsync tourner ce qui peut faire perturber le processus.

    Ma solution est de créer un fichier de « verrou » qu’on supprime à la fin du traitement ou si le processus est tué

    #!/bin/bash
    LOCKFILE=$HOME/lock.txt
    if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
    echo « already running »
    exit
    fi

    # make sure the lockfile is removed when we exit and then claim it
    trap « rm -f ${LOCKFILE}; exit » INT TERM EXIT
    echo $$ > ${LOCKFILE}

    #make sure ssh is running
    eval `ssh-agent -s`
    #rsync
    rsync -av –inplace –rsh=’ssh -p22′ /var/lib/deluge/Downloads/complete/ admin@ip_synology:/volume1/NetBackup

    rm -f ${LOCKFILE}

  5. Salut !
    Super article. Merci.
    J’avais envisagé la même chose pour chez moi, mais ça fait une quantité énorme de fichier a DL ce qui risque vite de faire exploser le NAS 🙂
    Du coup j’ai préféré la méthode manuelle pour les fichiers.
    Après, kodi peut aussi se connecter en FTP sur la seedbox pour streamer les films/séries.
    Ça marche aussi très bien et ça évite de surcharger le NAS.
    L’idéal serait de pouvoir exclure certaines fichiers dans la commande rsync… Genre descendre que les musiques et laisser les films…
    A creuser. Mais merci pour la partie échange de clef avec le syno, je ne m’étais jamais penché sur cette question.
    Bonne continuation

Laissez un commentaire