29Jun

Shell Script 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 à partir d'un sous-répertoire de votre boîte de développement vers le même sous-répertoire sur un serveur distant. Malheureusement, cela finit toujours par être un processus manuel ennuyeux impliquant le changement de répertoire sur les deux serveurs, et perd beaucoup de temps.

Donc, j'ai pris sur moi d'écrire un script shell pour automatiser cela pour moi, en utilisant scp pour la copie de fichiers sécurisée.(Note importante: ftp est horriblement non sécurisé, utilisez plutôt WinSCP)

Le problème principal à résoudre était que mon installation de WordPress sur ma machine de développement avait un répertoire de base différent de l'installation sur mon serveur. Sur ma machine de développement c'est /var/ www, et sur mon serveur c'est quelque chose de plus comme /var/www/howtogeek/docs/.J'ai décidé de simplement les déplacer dans les variables au début du script, comme ceci:

SSHSERVER = [email protected]
RDIR = documents /var/www/howtogeek/
LDIR = '\ / var \ / www'

Notez que le répertoire local( LDIR) dans le script a \ avant chaque / dans le chemin. C'est parce que nous allons passer cela dans une commande sed plus tard dans le script, donc nous devons échapper à ces valeurs. Je suis sûr qu'il y a un autre moyen de contourner cela, mais je ne suis pas au courant.

Ensuite, j'ai mis en place des connexions SSH automatisées. Pour ce faire, vous devez d'abord lancer l'utilitaire ssh keygen comme suit:

ssh-keygen -t rsa

Vous devez ensuite copier le fichier ~ /.ssh/ id_rsa.pub vers le fichier ~ /.ssh/ authorized_keys sur le serveur distant. Si le répertoire ~ /. ssh est déjà créé sur le serveur distant( peut vouloir vérifier), vous pouvez exécuter cette commande pour copier les clés:

cat ~ /.ssh/ id_rsa.pub |ssh utilisateur @ hostname 'cat & gt; & gt;.ssh / authorized_keys '

Maintenant, nous avons 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 définirons 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 courant 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 avez exécuté la commande, le bloc sed supprimerait l'/var/ www basé sur notre variable LDIR, mais laisserait la partie / wp-content /.

Le deuxième bloc s'assure juste de supprimer tout le chemin précédent du nom de fichier passé au script afin que vous obteniez juste le nom de fichier.

Par exemple, si vous avez nommé le script up.sh et l'avez exécuté à partir de votre répertoire /var/www/ /plugins/ /var/www/ local sur un fichier:

up.sh myplugin.php

Cela aurait été développé par le shell comme suit:

scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-contenu /plugins/ myplugin.php

Au lieu d'essayer de créer votre propre fichier de script basé sur l'article, je l'ai fourni pour que vous le téléchargiez. De cette façon, il n'y aura pas de problèmes avec les caractères spéciaux ne fonctionne pas. .. et oui, j'ai utilisé le script pour télécharger lui-même =)

Télécharger geek-uploader.sh

Mettez-le juste quelque part dans votre chemin, et nommez-le comme vous voulez. J'ai renommé le mien juste "up", donc je peux juste taper "up filename.txt" pour télécharger. Souvenez-vous également de l'ouvrir et de changer 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 sur Solaris, OS X, ou même Windows avec Cygwin installé.