¿Cómo automatizar la entrada de una contraseña en un archivo por lotes personalizado?

¿Cómo automatizar la entrada de una contraseña en un archivo por lotes personalizado?

Sé que esto les parecerá ingenuo a la mayoría de ustedes, pero todavía soy nuevo en Linux, así que tengan paciencia.

Estoy intentando crear un archivo por lotes para automatizar algunos comandos.
Uno de esos comandos es sudo -iya que necesito acceder a algunos archivos en la raíz.

Entonces mi script hasta ahora se ve así:

#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh

Sé que después sudo -isigue una solicitud de contraseña, entonces, ¿puedo emularla en mi script?

Respuesta1

Puede sudoeliminar su secuencia de comandos y asegurarse de que los usuarios llamen a la secuencia de comandos usando sudo scriptname.

Elimina sudo -ila línea de tu script y reemplázala con esto:

# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
    echo You must call this script using sudo. Aborting.
    exit 99
fi

Respuesta2

Buena pregunta. Pero es muy recomendable que no lo haga de la forma en que lo está intentando o imaginando actualmente. La razón para evitar este enfoque es que requiere ingresar su contraseña en un archivo de texto que otros usuarios/atacantes podrían leer. Ahora, puede configurar el archivo con 600 permisos para que solo pueda ser leído por su usuario (y root), pero no estoy seguro de si los subcomandos de los scripts pueden registrarse en algún lugar, haciendo que su contraseña vuelva a estar disponible para posibles atacantes. . Supongo que la verdadera pregunta es, ¿por qué necesitas el script para iniciar sesión como root automáticamente?

¿Es un proceso automatizado o hay alguna otra razón por la que no puede simplemente responder a la solicitud de contraseña que se presenta al ejecutar el script tal como está? Si se trata de un proceso automatizado, simplemente debe eliminar la línea sudo y agregar la llamada del script al cron de los usuarios raíz. Hay toneladas de documentación sobre cómo configurar trabajos cron disponibles con una simple búsqueda en Google, pero puedes comenzar coneste)

Además, este es un script que simplemente llama a otro script. Probablemente debería hacer que run-server.sh solo sea ejecutable por root, luego simplemente usarlo sudo supara iniciar sesión en root y luego ejecutarlo con /my-server/bin/run-server.sh. Nuevamente, puede agregar esto al cron de root si necesita automatizarlo según un cronograma.

ADVERTENCIA:No escribas esto, yespecialmenteno lo escriba en una línea de comando (se registrará)

echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh

información relacionada