Outils pour utilisateurs

Outils du site


issue57:c_c

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue57:c_c [2012/03/02 16:37] andre_domenechissue57:c_c [2012/03/06 10:55] (Version actuelle) auntiee
Ligne 3: Ligne 3:
 ** **
  
-Dans le numéro 37, j'ai écrit un article sur la configuration d'un serveur SSH sur votre ordinateur, pour l'utiliser comme un proxy SOCKS. Mais comme j'imagine que tous les lecteurs ne veulent pas l'utiliser comme tel, j'ai décidé de me concentrer sur la commande que j'utilise le plus en deuxième (la première commande que j'utilise est « pacman », la solution ArchLinux pour gérer les paquets). Avant d'aller plus loin sur ce qu'est cette commande, je vous expliquerai brièvement pourquoi vous pourriez être intéressé par cette solution. En particulier, elle vous permet de synchroniser les répertoires et les fichiers entre deux ordinateurs à travers le LAN (et, s'il est configuré correctement, aussi à travers Internet). Je l'utilise pour garder ma musique synchronisée entre mon portable et mon PC, pour garder mes fichiers de configuration à jour et pour copier tout ce dont j'ai besoin d'un appareil à l'autre. Il existe quelques commandes qui pourraient être utilisées, deux d'entre elles sont scp (secure copy) et rsync. Je m'attacherai à décrire rsync dans cet article, car il offre l'information de progression, une capacité de mise à jouret des options très utiles comme --ignore-existing.+Dans le numéro 37, j'ai écrit un article sur la configuration d'un serveur SSH sur votre ordinateur, pour l'utiliser comme un proxy SOCKS. Maiscomme j'imagine que tous les lecteurs ne veulent pas l'utiliser comme tel, j'ai décidé de me concentrer sur la seconde commande la plus utilisée (la commande que j'utilise le plus est « pacman », la solution ArchLinux pour gérer les paquets). Avant d'aller plus loin sur ce qu'est cette commande, je vous expliquerai brièvement pourquoi vous pourriez être intéressé par cette solution. En particulier, elle vous permet de synchroniser les répertoires et les fichiers entre deux ordinateurs à travers le LAN (et, s'il est configuré correctement, aussi à travers Internet). Je l'utilise pour garder ma musique synchronisée entre mon portable et mon PC, pour garder mes fichiers de configuration à jour et pour copier tout ce dont j'ai besoin d'un appareil à l'autre. Il existe quelques commandes qui pourraient être utilisées, deux d'entre elles sont scp (secure copy) et rsync. Je m'attacherai à décrire rsync dans cet article, car il offre l'information de progression, une capacité de mise à jour et des options très utiles comme --ignore-existing.
  
-===== to do ===== 
 ** **
 A few of you may be asking why I don't just use Dropbox, an external hard drive, or a USB stick (for smaller files). The answer is quite simple: Dropbox offers a limited amount of space, and the other options require me to remember to do this regularly. If you have SSH configured on your “sender” (in this case, my PC from which I transfer the files), and an SSH client (no server required) on your “receiver” (my laptop, in this case), then you can easily write a small script to run a cron (in other words, regularly, and without any input). If you want to automate this, you will need to configure SSH to use keys instead of passwords, so that you can access your server without having to input anything. This is fairly simple (using ssh-keygen to create the keys, and then copying the public key to the server), and is explained in plenty of places (see the Links section below for a link to a Wiki). A few of you may be asking why I don't just use Dropbox, an external hard drive, or a USB stick (for smaller files). The answer is quite simple: Dropbox offers a limited amount of space, and the other options require me to remember to do this regularly. If you have SSH configured on your “sender” (in this case, my PC from which I transfer the files), and an SSH client (no server required) on your “receiver” (my laptop, in this case), then you can easily write a small script to run a cron (in other words, regularly, and without any input). If you want to automate this, you will need to configure SSH to use keys instead of passwords, so that you can access your server without having to input anything. This is fairly simple (using ssh-keygen to create the keys, and then copying the public key to the server), and is explained in plenty of places (see the Links section below for a link to a Wiki).
 ** **
 +
 +Quelques-uns d'entre vous peuvent se demander pourquoi je n'utilise pas simplement DropBox, un disque externe ou une clé USB (pour les plus petits fichiers). La réponse est très simple : Dropbox n'offre qu'une quantité limitée d'espace et les autres options nécessitent que je me souvienne régulièrement de le faire. Si vous avez SSH configuré sur votre « émetteur » (dans ce cas, le PC à partir duquel je transfère les fichiers) et un client SSH (un serveur n'est pas nécessaire) sur votre « récepteur » (mon portable, dans ce cas), alors vous pouvez facilement écrire un petit script qui lance un cron (autrement dit, régulièrement, et sans intervention de votre part). Si vous voulez automatiser cela, vous aurez besoin de configurer SSH pour qu'il utilise des clés à la place de mots de passe, de telle manière que vous pourrez accéder à votre serveur sans avoir à entrer quoi que ce soit. C'est plutôt simple (en utilisant ssh-keygen pour créer les clés, et puis en copiant la clé publique sur le serveur) et ceci est expliqué dans un grand nombre d'endroits (voir la section Liens pour un lien vers un Wiki).
  
 ** **
Ligne 14: Ligne 15:
 The script should only do something if you're on your home network (this can be done by checking the ESSID of your wireless, or, if you connect your laptop to the LAN by cable when at home, checking if eth0 is active, or simply deciding on a specific time the script should run). The reason for this is because otherwise you'll have lots of failed SSH connections when doing this in a location besides your home network. I recommend thinking about your habits, and finding a solution that works best for you. Then write it into an if-statement in the script. The script should only do something if you're on your home network (this can be done by checking the ESSID of your wireless, or, if you connect your laptop to the LAN by cable when at home, checking if eth0 is active, or simply deciding on a specific time the script should run). The reason for this is because otherwise you'll have lots of failed SSH connections when doing this in a location besides your home network. I recommend thinking about your habits, and finding a solution that works best for you. Then write it into an if-statement in the script.
 ** **
 +
 +Une fois SSH configuré, pensons maintenant à quoi devrait ressembler le script. Je ne vous donnerai pas de script d'exemple, parce que je n'en ai pas encore implémenté de décent. Il y a des choses à considérer quand vous concevez votre script, comme :
 +Le script ne doit faire quelque chose que si vous êtes sur votre réseau local (ceci peut être fait en vérifiant le ESSID de votre wifi ou, si vous connectez votre portable sur le LAN par un câble chez vous, en vérifiant que eth0 est actif, ou simplement en déterminant une heure spécifique à laquelle le script devrait tourner). La raison pour cela est que, sinon, vous aurez un grand nombre d'échecs de connexion SSH si vous faites cela dans un lieu en dehors de votre réseau local. Je vous recommande de penser à vos habitudes et de trouver la solution qui marche le mieux pour vous. Puis vous l'écrivez dans un bloc IF dans le script.
  
 ** **
Ligne 22: Ligne 26:
 Is the destination folder and the source folder in the same location? If not, you'll need to keep track of where each file is supposed to go (similar to #2). Is the destination folder and the source folder in the same location? If not, you'll need to keep track of where each file is supposed to go (similar to #2).
 ** **
 +
 +Combien de fichiers/répertoires voulez-vous synchroniser et lesquels exactement ? Vous pouvez soit coder en dur chaque fichier ou répertoire dans le script, soit créer une liste des emplacements sur vos machines dans un fichier texte, puis utiliser un bloc WHILE et une lecture par ligne pour gérer chaque ligne séparément. Je vous recommande quelques fichiers : .bashrc (ou votre fichier rc pour le shell que vous utilisez), .Xdefaults (pour les couleurs du terminal), vos musiques, vos images et les fichiers de configuration des gestionnaires de fenêtres (XMonad, DWM, etc.)
 +
 +Est-ce que vous voulez mettre à jour (ce qui veut dire que les versions les plus récentes des fichiers sont celles à garder), ou ignorer les fichiers s'ils existent déjà sur le récepteur (utile pour la musique et les photos), avez-vous besoin de récursivité (ce qui signifie de suivre l'arborescence) ? Il y a quelques autres options très utiles à considérer offertes par rsync (voir la deuxième section de cet article).
 +
 +Est-ce que le répertoire cible et le répertoire source sont au même endroit ? Si ce n'est pas le cas, vous aurez besoin de garder une trace de l'emplacement où chaque fichier est supposé aller (similaire au #2).
  
 ** **
Ligne 28: Ligne 38:
 Once you've taken these points into consideration, it's time to write the script. I recommend you have at least 2 checks in the script (if you're connected to the right network, and if the sender is currently online). The rest of the script is entirely up to you, including when and how to run it. Back in issue #24, I wrote an article on cron, and since then have used plenty of examples, so I will only briefly discuss your options. When configuring the cron job, you can either dump the script in /etc/cron.hourly, or /etc/cron.daily. The other option is to edit your crontab (crontab -e <username>). In the crontab you can then create a line for the script that either runs every set number of hours/days, or set it to run at a specific time (or a specific date), and so on. I think a script that runs once a day is going to be quite enough for this. Once you've taken these points into consideration, it's time to write the script. I recommend you have at least 2 checks in the script (if you're connected to the right network, and if the sender is currently online). The rest of the script is entirely up to you, including when and how to run it. Back in issue #24, I wrote an article on cron, and since then have used plenty of examples, so I will only briefly discuss your options. When configuring the cron job, you can either dump the script in /etc/cron.hourly, or /etc/cron.daily. The other option is to edit your crontab (crontab -e <username>). In the crontab you can then create a line for the script that either runs every set number of hours/days, or set it to run at a specific time (or a specific date), and so on. I think a script that runs once a day is going to be quite enough for this.
 ** **
 +
 +Espace - avez-vous assez d'espace sur votre récepteur pour tous les fichiers venant de votre émetteur et, dans le cas contraire, qu'allez-vous faire pour y remédier ? Vous pouvez soit réduire votre liste de fichiers à synchroniser, soit coder une vérification dans le script avec df -h pour fixer une limite (ex : s'il ne reste que 9 Go, arrêt complet de la synchronisation et envoi d'un mail ou d'un prompt pour vous).
 +
 +Une fois que vous avez pris en considération tous ces points, il est temps d'écrire le script. Je vous recommande d'avoir au moins deux vérifications dans le script (si vous êtes connecté au bon réseau et si l'émetteur est actuellement en ligne). Le reste du script est entièrement de votre ressort, en particulier quand et comment le lancer. Dans le numéro 24, J'ai écrit un article sur cron et, depuis, j'ai utilisé des tas d'exemples, je ne vais donc parler que très brièvement des options. Quand vous configurez la tâche cron, vous pouvez copier le script soit dans /etc/cron.hourly, soit dans /etc/cron.daily. L'autre possibilité est d'éditer votre crontab (crontab -e <username>). Dans la crontab vous pouvez alors créer une ligne pour votre script qui peut être lancé à chaque période d'heures/de jours ou bien paramétrer le lancement à une heure (ou une date) spécifique, etc. Je pense qu'un script qui tourne une fois par jour sera bien suffisant. 
  
 ** **
Ligne 44: Ligne 58:
 --partial: Keep partially copied files --partial: Keep partially copied files
 ** **
 +
 +rsync
 +
 +Comme vous pouvez le voir dans le point 3 ci-dessus, rsync offre un grand nombre de vérifications pour éviter de copier plus de fichiers que nécessaire. Le plus utiles sont :
 +-u (--update) : n'écrase pas les fichiers qui sont plus récents sur le récepteur ;
 +--inplace : met à jour les fichiers sur place [Ndt : en les écrasant directement, sans fichier temporaire] ;
 +--append : ajoute les données à la fin des fichiers plus courts ;
 +-x : évite de dépasser les limites du filesystem (reste dans une partition) ;
 +--existing : ne crée pas de nouveau fichier sur le récepteur, met à jour seulement les fichiers existants ;
 +--ignore-existing : ignore les fichiers qui existent déjà sur le récepteur ;
 +--max-size=TAILLE : ne copie aucun fichier plus grand que TAILLE (--min-size existe aussi, quoique moins utile dans ce cas) ;
 +--exclude=MOTIF: exclut tout fichier qui correspond au MOTIF ;
 +--exclude-from=FICHIER : lit les MOTIF(S) dans ce FICHIER ;
 +--partial : Garde les fichiers copiés partiellement.
 +
  
 ** **
Ligne 62: Ligne 91:
 ** **
  
 +D'autres options utiles pour rsync :
 +--delay-updates : remet à leur place les fichiers mis à jour une fois que le transfert est complètement terminé ;
 +-r (--recursive) : suit les arborescences ;
 +-d : copie les répertoires sans récursivité (par défaut rsync n'entre dans aucun répertoire) ;
 +-l (--links): copie les liens symboliques comme des liens symboliques ;
 +-E (--executability) : garde les droits d'exécution des fichiers (utile pour les scripts) ;
 +-h : affiche les tailles et messages en langage humain [Ndt : conversion automatique en Go, Mo, etc...] ;
 +--progress : affiche une barre de progression pour chaque fichier.
 +
 +Pour la liste complète, lisez la page man de rsync.
 +
 +Le format de base de la commande rsync est :
 +
 +rsync <options> <source> <cible>
 + 
 ** **
 So, if I wanted to update all files from ~/scripts on my PC with ~/.bin on my laptop, I'd write: So, if I wanted to update all files from ~/scripts on my PC with ~/.bin on my laptop, I'd write:
Ligne 71: Ligne 115:
 As we round off this article, I'd like to make a few notes on off-site syncing: Syncing over the Internet, while useful, should be kept to a minimum, simply because the traffic, while encrypted, will be rather large, and might cause issues with an admin, or any kind of data limit you might have. Also, ssh keys are (generally) more secure than passwords, so I highly recommend using them wherever possible. As we round off this article, I'd like to make a few notes on off-site syncing: Syncing over the Internet, while useful, should be kept to a minimum, simply because the traffic, while encrypted, will be rather large, and might cause issues with an admin, or any kind of data limit you might have. Also, ssh keys are (generally) more secure than passwords, so I highly recommend using them wherever possible.
 ** **
 +
 +Donc, si je voulais mettre à jour tous les fichiers à partir de ~/scripts sur mon PC vers ~/.bin sur mon portable, j'écrirais :
 +
 +rsync -ru lswest@127.0.0.1:/home/lswest/scripts ~/.bin
 +
 +Ceci va alors les recopier en les écrasant. Logiquement, vous voudrez utiliser l'IP réelle de votre PC au lieu de l'IP localhost, mais c'est seulement un exemple.
 +
 +Comme cet article est presque terminé, je voudrais dire quelques mots sur la synchronisation hors-site : synchroniser par internet, bien que très utile, devrait être restreint à un minimum, simplement parce que le trafic, quoiqu'il soit chiffré, sera plutôt large et pourrait causer des problèmes avec un administrateur ou toute sorte de limites que vous pourriez avoir pour les données.    
 +De plus, les clés ssh sont, généralement, plus sécurisées que les mots de passe, donc je vous recommande de les utiliser partout où c'est possible.
  
 ** **
Ligne 79: Ligne 132:
 Links: https://wiki.archlinux.org/index.php/SSH_Keys#Generating_an_SSH_key_pair Links: https://wiki.archlinux.org/index.php/SSH_Keys#Generating_an_SSH_key_pair
 ** **
 +
 +S'il y a un large afflux de demandes pour un script d'exemple, je serai ravi de vous le fournir le mois prochain. Je vous recommande, cependant, d'essayer d'écrire le vôtre ou adapter un script d'exemple que vous jugerez correspondre à vos besoins. Si vous êtes de ceux qui en voudraient un, merci de me le faire savoir par courriel (adresse ci-dessous). Si vous avez des questions concrètes sur un script que vous écririez vous-même, vous êtes aussi invités à m'envoyer un mail sur le sujet.
 +
 +Si quelqu'un a des questions, des préoccupations ou simplement veut partager un script qu'il a réalisé, merci de m'envoyer un mail à lswest34@gmail.com. Si vous le faites, pensez à inclure C&C ou FCM dans le titre, sinon je ne le regarderai pas.
 +
 +Lien : https://wiki.archlinux.org/index.php/SSH_Keys#Generating_an_SSH_key_pair
 +
issue57/c_c.1330702671.txt.gz · Dernière modification : 2012/03/02 16:37 de andre_domenech