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.
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 !
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
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