Script Shell pour télécharger un fichier dans le même sous-répertoire sur un serveur distant
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, cela finit toujours par être un processus manuel fastidieux impliquant le changement de répertoires sur les deux serveurs, et une perte de temps considérable..
J'ai donc pris sur moi d'écrire un script shell pour automatiser cela pour moi, en utilisant scp pour la copie de fichiers sécurisée. (Remarque latérale importante: le ftp est terriblement 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 y a un autre moyen de contourner cela, mais je ne le sais pas..
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 souhaitez peut-être vérifier), vous pouvez exécuter cette commande pour copier les clés:
cat ~ / .ssh / id_rsa.pub | ssh utilisateur @ nom d'hôte 'cat >> .ssh / registered_keys'
Nous avons maintenant des connexions ssh automatisées, qui permettront d'utiliser l'utilitaire scp sans mot de passe. Examinons maintenant la commande scp que nous utiliserons 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 @ nom_hô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 enlèverait le répertoire / var / www en fonction de notre variable LDIR, tout en laissant 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 / 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 avec Cygwin installé..