Commande shell de mise à jour de site Web

Introduction

Si vous avez un site Web, vous avez, sans doute, sur votre disque, une hiérarchie de fichiers, image de ce que vous avez mis sur ce site. Il a, donc, été nécessaire de le télécharger une première fois puis de le mettre à jour à partir de cette image. Pour ce faire, il existe plusieurs methodes. certaines ont l'inconvénient de nécessiter beaucoup de manipulations.

Cette méthode consiste à lancer une seule commande quelque soit le nombre de fichiers er ceci éventuellemnt automatiquement. Elle utilise la commande lftp, fournie avec plusieurs distributions. Cette commande a l'avantage de pouvoir se faire controler par un script et possède des fonctions de mirroir. Elle va donc comparer les dates des fichiers locaux à la date d'un fichier de référence, comparer les fichiers distants aux locaux, copier les fichiers en conséquence, supprimer les fichiers distants qui ne sont plus en local, et créer les répertoires quand il le faut.

le script

En plus des commandes habituelles ftp, on remarque la commande mirror et ses paramètres. Pour les détails voir le manuel lftp -> mirror.

cat > $script <<!
set dns:fatal-timeout 30
set cmd:fail-exit yes
set cmd:parallel 0
set ftp:ignore-pasv-address yes
set ftp:passive-mode on
set ftp:sync-mode on
set ftp:use-allo no
set ftp:ssl-allow no

open -u  $user,$passwd $scheme$host

mirror --verbose=1 --no-umask --log=$lftplog -c --delete -RL \
       -x localmap.xml -x .*~ -x .*\.log $source_dir $target_dir
exit
!

la commande

Voici la commande avec un peu de nettoyage. Si la commande se termine mal, on ne modifie pas le fichier de référence, ce qui permet recommencer au même point.

lftp -f  $script
if [ $? -eq 0 ]; then
   echo "Touching  $newer_file"
   touch  $newer_file
fi
rm -f $script

Avec un peu plus de sécurité

On peut noter que les serveurs ftp sont de moins en moins utilisés, en effet à chaque connexion le mot de passe est transmis en clair en ligne comme l'indique la ligne suivante relevée par un sniffer:

18      0.369070        192.168.1.11    192.168.1.14    FTP     Request: PASS mypass0

Maintenant, si on dispose d'un accès ssh sur la machine distante, les lignes du début de cette page sont tout à fait réutilisables, car sshd sait faire du ftp. Et la commande lftp sait communiquer avec sshd. Il suffit de lui indiquer la méthode avec le nom du host. Cette méthode avec sshd est sftp. Noter que sftp est aussi le nom d'un commande client pour communiquer avec sshd.

open -u $user,$password  $host

est remplacé par la ligne suivante, en notant que $password est null.

open -u $user,$password  sftp://$host

Pour éviter la demande de mot de passe à chaque fichier, il faut mettre en place un accès ssh sur la machine distante. installation d'un compte ssh

Download