Lors du précédent article nous avons vu comment créer une sauvegarde automatique avec un script shell et la crontab. Maintenant nous allons étudier comment enregistrer cette sauvegarde sur serveur distant en utilisant 3 méthodes : AFP, SMB et FTP.
AFP : Apple File Protocol, est le système de gestion du réseau propre au Mac. Lorsque dans un réseau local nous connectons nos macs entre eux, c’est à ce protocol que nous faisons appel.
Pour écrire le script vous pouvez utiliser n’importe quel éditeur de texte qui est capable d’enregistrer au format brut .txt (par pitié tout sauf word). TextEdit est parfait pour celà.
Déclarer nos variables :
Pour se connecter sur un poste par AFP, nous avons besoins de 4 variables :
le nom qui est utilisé pour la connexion
le mot de passe utilisé pour la connexion
le nom ou l’ip du Mac sur lequel on désire se connecter
le nom de l’utilisateur ou du volumes du Mac distant sur lequel on veut se connecter.
En effet lorsque vous vous connecter par le finder sur un mac distant, si il y a plusieurs utilisateurs, il va vous lister les utilisateurs ainsi que les volumes (si il y’a plusieurs disques durs) et vous demandez de choisir. il nous faut donc renseigner cette variable pour que le script fonctionne correctement.
De plus il nous faut décrire impérativement 2 variables qui sont :
le dossier source : c’est le dossier que l’on désire archiver
le dossier cible : c’est le dossier ou l’on désire stocké l’archive.
Donc comme entête de script nous avons :
Puis pour notre archive.
Pour archiver convenablement nous allons donner un nom à l’archive qui comportera le nom du dossier archiver et la date d’archivage. pour celà nous allons créer 2 nouvelles variables :
Nous allons donc avoir une archive qui sera nommé sous la forme : archive_de_Moi_du_30-08.
Connexions AFP au serveur :
Pour se connecter au server AFP il faut utliser la commande open et pour se déconnecter la commande umount
Création de l’archive :
Pour archiver nous allons utiliser la commande tar couplé à la compression gzip. Ainsi nous obtiendrons une archive compressée de tout nos documents. La commande s’écrit sous la forme suivante : tar -zcvf fichier.tgz fichier_source
Ce qui dans notre cas donne :
tar -zcvf "${cible}"/archive_de_"${nom_archive}"_du_"${jour}".tgz "${source}"
Nous obtenons donc comme script :
Voilà, ca marche tout seul. N’oubliez pas tout de même de graver vos archives sur Cd ou DVD
Pour ce qui est de la sauvegarde sur serveur distant via FTP, la méthode est un peu différente, même si au bout du compte les variables et la compression sont les mêmes, à savoir :
nom du serveur
log utilisateur
pass utilisateur
dossier source à archiver
Dossier cible contenant l’archive.
La date et le nom du dossier source pour nommer notre archive.
Mais contrairement à la sauvegarde via AFP, il nous faut procéder en 2 temps. Premièrement, nous devons créer notre archive, et dans un second temps la transférer sur le serveur FTP. Pour cela nous allons faire transiter l’archive par un dossier temporaire.
Création de l’archive
De la même façon que pour AFP nous allons utilisé tar et gzip.
tar -zcvf "${archive}" "${source}"
Transfert via FTP
Il nous faut récupérer le nom de l’archive pour pouvoir l’utiliser lors du transfert FTP :
doc_dest=$(basename "${archive}")
Maintenant que nous avons créé l’archive, que nous avons son nom d’arrivé il nous faut ouvrir une session FTP.
Attention à ne pas transferer de trop gros archives via FTP. Sinon le temps de transfert risque d’être extremement long, et votre serveur n’est pas extensible (surtout si c’est un ftp perso).
La connexion sur un serveur microsoft ou Linux via SMB est un peu différente car samba utilise les mêmes commandes que FTP, mais on ne peut concatainer, ces commandes. Il faut donc les taper au kilomètre en les séparant d’un ’ ;’.
Contrairement aux 2 méthodes précédentes, on peut sécuriser nos noms et mot de passe en les écrivants dans un fichier que nous pouvons cacher et protéger en lecture.
1 - la méthode simple : le mot de passe est dans le script
Comme pour nos autres scripts nous allons déclarer nos variables :
Le nom du serveur (ici monpc) ne correspond pas nécessairement au nom IP de la machine, mais au nom NETBIOS
Comme pour la sauvegarde par FTP, nous allons d’abord faire une archive dans notre dossier temporaire /tmp/
Puis on lance la connexion, et la copie sur le serveur avec la commande smbclient
l’option -U nous permet d’insérer notre login/password, l’option -D nous permet de nous placer directement dans le dossier cible et l’option -c permet de lancer la copie, grace à la commande put.
Tout doit être écrit sur une seule ligne, c’est du PC donc trés capricieux et limite pénible.
De plus dans les exemples ci-dessus (AFP & FTP) nous pouvions nommer notre archive en utilisant des variables (le jour, le nom du dossier ....) ici la commande put ne supporte aucune variable, donc soyez suffisament clair dans le nom que vous attribuerez à l’archive (ici sauvegarde.tgz).
2 - la méthode "sécurisée" : le mot de passe est dans un fichier
Tout d’abord créer un dossier caché à la racine de votre home. Pour celà, ouvrez un shell et tapez : % mkdir .smb_conf
Puis en sécuriser l’accès :
% chmod 700 .smb_conf
Puis ouvrez textedit et saissisez les lignes :
sauvegardez le au format .txt (et non RTF) sous le nom log.txt
Nous allons le protéger en lecture/ecriture :
% chmod 700 log.txt
(utilisez le glisser/déposer de l’icône dans la fenêtre terminal).
Ainsi vous seul avez accès à ce dossier et à ce document.
Les variables sont les mêmes, et nous allons rajouter celle qui va indiquer le chemin vers le fichier log.txt
Utiliser toujours la même méthode d’archivage que précédemment à savoir :
Nous allons maintenant nous connecter non plus avec l’option -U, mais avec l’option -A :
En fin de script ne pas oublier de supprimer l’archive :
rm /tmp/*.tgz
Voilà, et zou dans la crontab et vous voilà avec de quoi sauvegarder dans toute les conditions :D plus d’excuse.
Pour chaque script n’oubliez pas de le rendre executable et de le tester avant de le mettre dans votre crontab :
Ouvrez un nouveau shell, puis ’chmod +x mon_script.sh’. (glisser/déposer l’icône de votre script dans la fenêtre terminal)
taper ’./mon_script.sh’ pour l’exécuter. (attention de bien être dans le dossier dans lequel vous avez placer votre script)
ou bien taper : ’sh mon_script.sh’ (vous pouvez alors utiliser le glisser/déposer).
N’oubliez pas que de toute façon vos identifiants circulent en claire sur le réseau.
Bonjour,
J’ai cherché comment on pourrait passer une variabe à la commande smbclient suivante :
smbclient //"$serveur"/"$partage" -A "$log" -D "$cible" -c ’put /tmp/sauvegarde.tgz sauvegarde.tgz
Voici comment faire (en deux lignes) :
CMD="smbclient //$serveur/$partage -A $log -D $cible -c ’put /tmp/$fichier $fichier"
eval $CMD
PS : l’article est super intéressant :-)
Bonjour, pour passer une option dans la partie du put, on doit pouvoir utiliser des guillemets (au lieu de quotes simples) :
smbclient //"$serveur"/"$partage" -A "$log" -D "$cible" -c "put /tmp/sauvegarde.tgz sauvegarde.tgz"
Merci pour l’article.
Bonjour, on doit pouvoir passer des variables à la dernière partie en utilisant des guillemets autour du put : smbclient //"$serveur"/"$partage" -A "$log" -D "$cible" -c " put /tmp/sauvegarde.tgz sauvegarde.tgz "
Merci pour cet article.
Encore un tres bon article Captain_X ! mais que je decouvre un peu tardivement. ;) merci :)
Par contre, concernant la sauvegarde via AFP, je me suis fait avoir sur le nom du volume car mon mac et le mac distant avait le meme nom (Macintosh HD). Du coup, le nom du volume monté (qd on le fait manuellement) est Macintosh HD-1. J’ai changé mon nom de volume pour plus de carté :)
En plus, pour symboliser l’espace via AFP, il faut faire un "%20" sans les guillements et non un "\ " comme sous unix.
Cela peut peut etre donne des solutions a un utilsateur moins habitue a ce genre de problemes ;)