29Jun

Script de Shell para subir un archivo al mismo subdirectorio en un servidor remoto

Una tarea muy común para un desarrollador web es cargar un único archivo desde un subdirectorio en su caja de desarrollo al mismo subdirectorio en un servidor remoto. Desafortunadamente, esto siempre termina siendo un proceso manual molesto que implica el cambio de directorios en ambos servidores, y desperdicia una gran cantidad de tiempo.

Por lo tanto, me he tomado la responsabilidad de escribir un script de shell para automatizar esto para mí, usando scp para la copia segura de archivos.(Nota importante: el ftp es terriblemente inseguro, use WinSCP en su lugar)

El problema principal a resolver fue que mi instalación de WordPress en mi máquina de desarrollo tiene un directorio base diferente al de la instalación en mi servidor. En mi máquina de desarrollo es /var/ www, y en mi servidor hay algo más parecido a /var/www/howtogeek/docs/.Decidí simplemente moverlos a las variables al comienzo del script, así:

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

Tenga en cuenta que el directorio local( LDIR)) en el script tiene un \ before cada / en el camino. Esto se debe a que vamos a pasar esto a un comando sed más adelante en el script, así que tenemos que escapar de esos valores. Estoy seguro de que hay otra forma de evitar esto, pero no lo sé.

A continuación, configuro inicios de sesión ssh automáticos. Para hacer esto, primero debe ejecutar la utilidad ssh keygen de la siguiente manera:

ssh-keygen -t rsa

Luego, debe copiar el archivo ~ /.ssh/ id_rsa.pub en el archivo ~ /.ssh/ authorized_keys en el servidor remoto. Si el directorio ~ /. ssh ya está creado en el servidor remoto( es posible que desee verificarlo), puede ejecutar este comando para copiar las claves:

cat ~ /.ssh/ id_rsa.pub |usuario de ssh @ nombre de host 'cat & gt; & gt;

de. ssh / authorized_keys Ahora tenemos inicios de sesión ssh automatizados, que permitirán usar la utilidad scp sin una contraseña. Ahora echemos un vistazo al comando scp que usaremos en el script:

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

El $ 1 es el parámetro que pasará al script para el nombre de archivo que está tratando de cargar.$ SSHSERVER y $ RDIR son variables que estableceremos al comienzo de la secuencia de comandos para establecer el usuario @ hostname y la ruta remota anterior.

El primer bloque que comienza con pwd | sed toma la ruta del directorio actual y elimina la parte anterior de la ruta que no coincide con el servidor remoto, pero deja el resto de la ruta. Por ejemplo, si estuvieras en /var/www/ wp-content / cuando ejecutases el comando, el bloque sed eliminaría el /var/ www basado en nuestra variable LDIR, pero dejaría el contenido / wp / parte de él.

El segundo bloque simplemente se asegura de quitar toda la ruta anterior del nombre de archivo pasado al script para que solo obtenga el nombre del archivo.

Por ejemplo, si usted nombró el script up.sh y lo ejecutó desde su /var/www/ wp-content /plugins/ local en un archivo:

up.sh myplugin.php

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

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

En lugar de tratar de crear su propio archivo de script basado en el artículo, lo proporcioné para su descarga. De esa forma no habrá ningún problema con los caracteres especiales que no funcionen. .. y sí, utilicé el script para subirlo a sí mismo =)

Descargar geek-uploader.sh

Simplemente colóquelo en algún lugar de su camino, y asígnele el nombre que desee. Cambié el nombre de la mía por "arriba", así que puedo escribir "arriba nombredearchivo.txt" para subir. Recuerde también abrirlo y cambiar las variables al comienzo del script para que coincida con su entorno.

Esta secuencia de comandos debería funcionar 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.