¿Es posible automatizar la configuración de un host compartido utilizando el script de shell bash?

¿Es posible automatizar la configuración de un host compartido utilizando el script de shell bash?

Preámbulo: Nunca antes había creado un script de Shell Bash. Entonces, y antes que nada, ni siquiera estoy seguro de si esta ES la herramienta adecuada para el trabajo. Si no es así, por favor, y antes que nada, déjame saber cuál es, en tu opinión, la mejor alternativa.

Contexto: A menudo hago tareas repetitivas cada vez que intento configurar un sitio web. Deseo automatizar esas tareas ejecutando uno o dos comandos. ACTUALIZACIÓN: El host compartido está basado en Unix. Las máquinas locales son Mac OS X, por lo que también están basadas en Unix.

Como ejemplo, estas son algunas de las tareas (comandos) que hago a menudo:

SCP:

scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile

scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig

SSH directamente:

ssh [email protected] 
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos

EDITAR, ENCONTRAR, REEMPLAZAR GUARDAR Y SALIR:

pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"

AFAIK: Esos son los diferentes tipos de tareas que deseo que realice el guión.

Pregunta 1: ¿Puede el script bash manejar SCP, SSH directamente y EDITAR ENCONTRAR REEMPLAZAR GUARDAR Y SALIR?

Pregunta 2: Se deben solicitar algunos parámetros al usuario que ejecuta el script, y esos parámetros deben usarse para colocarse dentro de algunos archivos (reemplazando palabras clave específicas que existan). ¿Se puede lograr esto?

Pregunta 3: ¿Deberíamos copiar los archivos al control remoto y editarlos directamente en el control remoto, o deberíamos tomar los archivos localmente, "editarlos localmente en una ubicación temporal" y luego colocarlos en el servidor? Supongo que lo segundo es mucho más complicado.

¿Algún ejemplo que pueda ver?

Muchas gracias por adelantado

Respuesta1

La respuesta corta es: sí a todos.

Te daré algunos ejemplos. El siguiente es un ejemplo de un comando que ejecuta un script bash local en una máquina remota: tenga en cuenta que no es necesario copiarlo de forma remota:

   ssh user@remote_pc 'bash -s' < local_file.sh

Esto es tan simple que quizás no merezca escribir un guión completo para manejarlo, pero si desea hacerlo, también puede organizarlo mediante un guión. Sin embargo, para que esto funcione, deberá configurar passwordless loginlas conexiones ssh. Si no lo hace, los comandos ssh/scp dentro del script se detendrán mientras esperan que ingrese la contraseña del usuario remoto.

En cuanto a edición y demás, Unix tiene el editor de secuencias definitivo sed, que hace exactamente esto: por ejemplo, el comando

 sed 's/a/A/g' old_file.txt > new_file.txt

sustituye minúsculas apor mayúsculas Ay coloca la salida en un nuevo archivo. Esto también se puede programar fácilmente.

En cuanto a los parámetros, el script de shell puede leer parámetros de un archivo o puede consultar el entorno para obtener algunos parámetros. No es necesario pedirle al usuario su nombre de inicio de sesión,

  echo $USER
  whoami

lo hará, incluso desde dentro del guión. Lo mismo ocurre con la dirección de casa, echo $HOMEetc.

En cuanto a su tercera pregunta, espero que mi primera respuesta también haya respondido a eso: el primer comando le permite ejecutar un archivo de script, que editó localmente, en un servidor remoto, sin siquiera tener que copiarlo allí.

Bienvenido al mundo de *Nix, dondetu deseo es mi comando.

Lo siento, lo olvidé: este comando

  export -p | more

mostrará todas las variables locales que están disponibles en todas partes (técnicamente, que han sido exportado).

información relacionada