Shell Script pour télécharger un fichier au même sous-répertoire de la sur un serveur distant
Une tâche très commun pour un développeur web est téléchargée d'un seul fichier à partir d'un répertoire sur votre boîte de développement de la même sous-répertoire sur un serveur distant. Malheureusement, cela finit toujours par être un processus manuel gênant impliquant des répertoires de commutation sur les deux serveurs, et gaspille une grande quantité de temps.
Donc, j'ai pris sur moi d'écrire un script shell pour automatiser cela pour moi, en utilisant scp pour copier des fichiers sécurisé. (Side Note importante: ftp est horriblement insécurité, l'utilisation WinSCP instead)
Le principal problème à résoudre était que mon WordPress installer sur ma machine de développement a un répertoire de base différente de celle de l'installation sur mon serveur. Sur ma machine de développement, c'est / var / www, et sur mon serveur est quelque chose comme / var / www / howtogeek / docs /. J'ai décidé de déplacer ces en variables au début du script, comme ceci:
SSHSERVER=thegeek@hostname.com
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 ce dans une commande sed tard dans le script, nous avons donc d'échapper à ces valeurs. Je suis sûr qu'il ya une autre façon de contourner cela, mais je ne suis pas au courant.
Ensuite, j'ai mis en place automatisée des connexions ssh. Pour ce faire, vous devez d'abord exécuter l'utilitaire ssh keygen comme ceci:
ssh-keygen-t rsa
Ensuite, vous devez copier le fichier ~ / .ssh / id_rsa.pub dans ~ / .ssh / authorized_keys fichier sur le serveur distant. . Si le répertoire ~ / ssh est déjà créé sur le serveur distant (pourriez vouloir vérifier), puis vous pouvez exécuter cette commande pour copier les clés plus:
cat ~ / .ssh / id_rsa.pub | ssh utilisateur @ machine "cat>> .ssh / authorized_keys '
Maintenant, nous avons automatisé connexions ssh, ce qui permettra à l'aide de l'utilitaire scp sans mot de passe. Maintenant, nous allons jeter un oeil à la commande scp, 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 allez passer au script le nom du fichier que vous tentez de télécharger. RDIR $ SSHSERVER et $ sont des variables que nous allons mettre au début du script pour définir l'utilisateur @ nom d'hôte et le chemin qui précèdent distance.
Le premier bloc qui commence par pwd | sed prend le chemin du répertoire courant et se déshabille la partie précédente de la voie qui ne correspond pas au serveur distant, mais laisse le reste du chemin. Par exemple, si vous étiez dans / var / www / wp-content / quand vous avez lancé la commande, le bloc serait sed enlève le répertoire / var / www basée sur notre variable Ldir, mais laisser la partie / wp-content / d'elle .
Le deuxième bloc s'assure juste pour enlever le chemin complet précédant le nom du fichier off passés au script de sorte que vous obtenez juste le nom du fichier.
Par exemple, si vous avez nommé le up.sh script et il a couru à partir de votre local / var / www / wp-content / plugins / répertoire sur un fichier:
up.sh myplugin.php
Cela aurait été étendu par le shell comme suit:
scp myplugin.php thegeek@hostname.com: / var / www / howtogeek / docs / wp-content / plugins / myplugin.php
Au lieu d'essayer de créer votre fichier de script propre fondée sur l'article, je l'ai mis à votre disposition pour télécharger. De cette façon, il n'y aura pas de problèmes avec les caractères spéciaux ne fonctionnent pas ... et oui, j'ai utilisé le script pour se upload =)
Il suffit de le mettre quelque part dans votre chemin, et c'est le nom que vous voulez. J'ai renommé le mien juste "up", si je peux juste taper "jusqu'à nomfichier.txt" à télécharger. Rappelez-vous aussi de l'ouvrir et modifier les variables au début du script pour correspondre à votre environnement.
Ce script devrait fonctionner sur n'importe quoi avec une coque * nix et l'utilitaire scp. J'utilise Ubuntu, mais il devrait fonctionner sur Solaris, OS X, ou même Windows avec Cygwin installé.
Commentaires
Enregistrer un commentaire