Une tâche très courante pour un développeur Web consiste à télécharger un seul fichier d'un sous-répertoire de votre zone de développement vers le même sous-répertoire sur un serveur distant. Malheureusement, il s’agit toujours d’un processus manuel fastidieux qui implique de changer de répertoire sur les deux serveurs et qui perd beaucoup de temps.
J'ai donc pris l'initiative d'écrire un script shell pour l'automatiser, en utilisant scp pour la copie de fichiers sécurisée. (Remarque latérale importante: ftp est horriblement dangereux, utilisez plutôt WinSCP)
Le principal problème à résoudre est que mon installation WordPress sur ma machine de développement a un répertoire de base différent de celui de l'installation sur mon serveur. Sur ma machine de développement, il s’agit de / var / www, et sur mon serveur, il s’agit plutôt de / var / www / howtogeek / docs /. J'ai décidé de déplacer ces variables dans des variables au début du script, comme ceci:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’
Notez que le répertoire local (LDIR) dans le script a un avant chaque / dans le chemin. C'est parce que nous allons passer cela dans une commande sed plus tard dans le script, nous devons donc échapper à ces valeurs. Je suis sûr qu’il existe un autre moyen de contourner ce problème, mais je ne suis pas au courant.
Ensuite, je configure des connexions ssh automatisées. Pour ce faire, vous devez d’abord exécuter l’utilitaire ssh keygen de la manière suivante:
ssh-keygen -t rsa
Ensuite, vous devez copier le fichier ~ /.ssh / id_rsa.pub dans le fichier ~ /.ssh / registered_keys du serveur distant. Si le répertoire ~ /.ssh est déjà créé sur le serveur distant (vous voudrez peut-être vérifier), vous pouvez exécuter cette commande pour copier les clés:
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’
Nous avons maintenant des connexions ssh automatisées, qui permettront d’utiliser l’utilitaire scp sans mot de passe. Voyons maintenant la commande scp que nous allons utiliser dans le script:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`
Le $ 1 est le paramètre que vous passerez au script pour le nom de fichier que vous essayez de télécharger. $ SSHSERVER et $ RDIR sont des variables que nous allons définir au début du script pour définir l’utilisateur @ nomhôte et le chemin distant précédent.
Le premier bloc qui commence par pwd | sed prend le chemin du répertoire actuel et supprime la partie précédente du chemin qui ne correspond pas au serveur distant, mais laisse le reste du chemin. Par exemple, si vous étiez dans / var / www / wp-content / lorsque vous exécutiez la commande, le bloc sed supprimera le / var / www en fonction de notre variable LDIR, mais en laissera la partie / wp-content /..
Le second bloc s'assure simplement de supprimer le chemin complet du chemin précédent du nom de fichier transmis au script afin d'obtenir le nom de fichier.
Par exemple, si vous avez nommé le script up.sh et que vous l'avez exécuté à partir de votre répertoire local / var / www / wp-content / plugins / sur un fichier:
up.sh myplugin.php
Cela aurait été développé par le shell comme suit:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Au lieu d'essayer de créer votre propre fichier de script basé sur l'article, je vous l'ai fourni pour téléchargement. De cette façon, il n’y aura pas de problème avec les caractères spéciaux qui ne fonctionneront pas… et oui, j’ai utilisé le script pour se télécharger =)
Télécharger geek-uploader.sh
Il suffit de le placer quelque part dans votre chemin et nommez-le comme vous voulez. J'ai renommé le mien en «up», je peux donc taper «up filename.txt» pour le télécharger. Pensez également à l'ouvrir et à modifier les variables au début du script pour qu'elles correspondent à votre environnement.
Ce script devrait fonctionner sur n'importe quoi avec un shell * nix et l'utilitaire scp. J'utilise Ubuntu, mais cela devrait fonctionner sous Solaris, OS X ou même Windows sur lequel Cygwin est installé.