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

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

El principal problema 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 es algo más parecido a / var / www / howtogeek / docs /. Decidí simplemente moverlos a variables al principio del script, como esto:

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

Tenga en cuenta que el directorio local (LDIR) en el script tiene una antes de cada / en la ruta. Esto se debe a que vamos a pasar esto a un comando sed más adelante en el script, por lo que tenemos que escapar de esos valores. Estoy seguro de que hay otra manera de evitar esto, pero no lo sé.

A continuación, configuro los inicios de sesión ssh automatizados. Para hacer esto, primero debe ejecutar la utilidad ssh keygen así:

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 sobre:

cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Ahora tenemos inicios de sesión ssh automatizados, que permitirán el uso de 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 intenta cargar. $ SSHSERVER y $ RDIR son variables que estableceremos al comienzo 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 elimina la parte anterior de la ruta que no coincide con el servidor remoto, pero deja el resto de la ruta. Por ejemplo, si estaba en / var / www / wp-content / cuando ejecutó el comando, el bloque sed eliminaría / var / www según nuestra variable LDIR, pero dejaría la / wp-content / parte de ella .

El segundo bloque solo se asegura de quitar toda la ruta de acceso anterior del nombre de archivo pasado a la secuencia de comandos para que solo obtenga el nombre de archivo.

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

up.sh myplugin.php

Esto habría sido expandido por el shell como el siguiente:

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

En lugar de intentar crear su propio archivo de script basado en el artículo, lo he provisto para que lo descargue. De esa forma, no habrá ningún problema con los caracteres especiales que no funcionan ... y sí, usé el script para cargarlo solo =)

Descargar geek-uploader.sh

Solo póngalo en algún lugar de su camino y llámelo como desee. Renombré el mío a solo "arriba", así que solo puedo escribir "up filename.txt" para cargar. También recuerde abrirlo y cambiar las variables al principio del script para que coincida con su entorno.

Este script 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 en Windows con Cygwin instalado.

Los Mejores Consejos:
Comentarios: