Usar un comando con sudo en un Shell Script

Aviso: si escribimos nuestra contraseña de root en un fichero de texto plano, como un script, cualquiera que tenga acceso a esa máquina puede leerla y tener control total sobre ese sistema.

Hay veces que queremos, o tenemos, que automatizar algún proceso que requiera permisos de administrador, y no queremos o no podemos estar escribiendo siempre la contraseña de root. Para ello, sudo tiene el modificador -S que lee la contraseña de la entrada estándar, por lo que le podemos pasar con una tubería la contraseña.

Ilustremos paso a paso este proceso.

Queremos hacer un script que actualice los listados de los paquetes de apt y que actualice los paquetes a su última versión.

Si escribimos un script así:

#!/bin/bash

apt-get update
apt-get upgrade

Nos devuelve:

E: No se pudo abrir el fichero de bloqueo «/var/lib/dpkg/lock-frontend» - open (13: Permiso denegado)
E: No se pudo obtener el bloqueo de la interfaz dpkg (/var/lib/dpkg/lock-frontend). ¿Es usted superusuario?
E: No se pudo abrir el fichero de bloqueo «/var/lib/dpkg/lock-frontend» - open (13: Permiso denegado)
E: No se pudo obtener el bloqueo de la interfaz dpkg (/var/lib/dpkg/lock-frontend). ¿Es usted superusuario?

Normal, si no soy superusuario. Pero, ¿qué pasa si le indico sudo delante de apt?

[sudo] contraseña para fernando: 

Y si no escribo nada, se queda esperando a que le ponga la clave. Si he ejecutado manualmente el script, puedo interactuar con él. Pero muchas veces programamos scripts para no tener que interactuar. Por lo que tendremos que poder pasarle la contraseña del usuario de alguna manera. Y aquí es donde llega el operador -S (s mayúscula).

Supongamos (obviamente no es así) que mi contraseña es 0000, podemos indicarle a sudo -S con una tubería y echo la contraseña:

#!/bin/bash

echo 0000 | sudo -S apt-get update
echo 0000 | sudo -S apt-get upgrade

Y ahora sí que ejecuta la acción con permisos de administrador. Pero con el riesgo de que alguien vea ese script y vea la contraseña. Hágase, si se hace, con precaución.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.