dimanche 4 mars 2012

Shell Script para cargar un archivo en el mismo subdirectorio en un servidor remoto

Una tarea muy común que un desarrollador web es subir un único archivo de un subdirectorio en su caja de desarrollo para el mismo subdirectorio en un servidor remoto. Desafortunadamente, esto siempre termina siendo un proceso manual molesto participación directorios de conmutación en ambos servidores, y los desechos de una gran cantidad de tiempo.

Por lo tanto, he tomado sobre mí mismo a escribir un script de shell para automatizar esto por mí, usando scp para copiar archivos de forma segura. (Nota al margen Importante: ftp es terriblemente inseguro, el uso WinSCP instead)

El principal problema a resolver era que mi instalación de WordPress en mi equipo de desarrollo cuenta con un directorio de base distinta a la instalación en mi servidor. En mi equipo de desarrollo es / var / www, y en mi servidor es algo más parecido a / var / www / howtogeek / docs /. Decidí ir sólo a aquellos en las variables al principio del script, de esta manera:

SSHSERVER=thegeek@hostname.com
RDIR=/var/www/howtogeek/docs
LDIR = ' / var / www'

Tenga en cuenta que el directorio local (LDIR) en el guión tiene un antes de cada / en el camino. Esto se debe a que vamos a pasar esto en un comando sed más tarde en el guión, así que tenemos que escapar de esos valores. Estoy seguro de que hay alguna otra manera alrededor de esto, pero soy consciente de ello.

A continuación, configurar automatizado ssh. Para ello, es necesario ejecutar primero la utilidad ssh keygen, así:

ssh-keygen-t rsa

Luego hay que copiar el archivo ~ / .ssh / id_rsa.pub a ~ / .ssh / authorized_keys en el servidor remoto. . Si el directorio ~ / ssh ya se ha creado en el servidor remoto (puede que quiera consultar), entonces se puede ejecutar este comando para copiar las claves más:

cat ~ / .ssh / id_rsa.pub | ssh usuario @ host "cat>> .ssh / authorized_keys '

Ahora tenemos automatizado ssh, lo que permitirá utilizar la utilidad scp sin contraseña. Ahora echemos un vistazo al comando scp vamos a utilizar en el script:

scp $ 1 $ SSHSERVER: $ RDIR `pwd | sed" s / $ {LDIR }//"`/` echo $ 1 | sed 's / .* ///'`

$ 1 es el parámetro que va a pasar a la escritura para el nombre del archivo que está intentando cargar. RDIR SSHSERVER $ y $ son variables vamos a establecer al inicio de la secuencia de comandos para configurar el usuario @ nombre de host y la ruta remota anterior.

El primer bloque que comienza con pwd | sed toma la ruta del directorio actual y se despoja de la parte anterior de la ruta que no coincide con el servidor remoto, pero deja el resto del camino. Por ejemplo, si usted estuviera en / var / www / wp-content / cuando se ejecutó el comando, el bloque de sed que quitarse el directorio / var / www sobre la base de nuestra variable LDIR, pero dejar la parte / wp-content / de ella .

El segundo bloque sólo se asegura de que la tira de la trayectoria anterior de todo el nombre del archivo pasa a la escritura de modo que acaba de obtener el nombre del archivo.

Por ejemplo, si el nombre de la up.sh guión y la dirigió desde su local / var / www / wp-content / plugins / directorio en un archivo:

up.sh myplugin.php

Esto habría sido expandido por el shell de la siguiente manera:

scp myplugin.php thegeek@hostname.com: / var / www / howtogeek / docs / wp-content / plugins / myplugin.php

En lugar de tratar de crear su propio archivo de comandos basado en el artículo, lo he previsto para su descarga. De esa manera no habrá ningún problema con caracteres especiales no funciona ... y sí, he usado el script que se carga =)

Descargar geek-uploader.sh

Sólo hay que poner en algún lugar de su ruta y el nombre que quieras. I nombre mío acaba de "arriba", por lo que sólo puede escribir "hasta archivo.txt" para subir. Asimismo, recuerda a abrirlo y cambiar las variables al comienzo de la secuencia de comandos para que coincida con su entorno.

Este script debe trabajar en cualquier cosa con un shell * nix y la utilidad scp. Estoy usando Ubuntu, pero debería funcionar en Solaris, OS X, o incluso Windows con Cygwin instalado.

Aucun commentaire:

Enregistrer un commentaire