Siempre se recomienda utilizar contraseñas cifradas en los scripts de shell bash de Linux. Por lo general, en el script bash shell es posible que necesitemos una contraseña para el usuario remoto mientras nos conectamos al sistema remoto, al usuario ftp y al usuario proxy, etc. En este artículo, cubriremos cómo cifrar la contraseña usando el comando openssl y luego veremos cómo se puede cifrar esta utilizado en el script bash shell.
Cifrar contraseña usando Openssl
Supongamos que queremos conectarnos al sistema remoto a través de ssh usando una contraseña dentro de un script de shell. Para cifrar una contraseña, use el siguiente comando openssl en su sistema Linux.
$ echo "[email protected]#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]#
Para guardar la contraseña cifrada en un archivo, use el siguiente comando,
$ echo "[email protected]#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]# > secret.txt
Establezca los siguientes permisos en el archivo secret.txt usando el comando chmod,
$ chmod 600 secret.txt
Descifrar contraseña cifrada usando Openssl
Para descifrar la contraseña, ejecute a continuación
$ cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]# [email protected]#2 $
Usar contraseña cifrada en el script Bash Shell
Use el siguiente script de shell de muestra que usará una contraseña cifrada mientras se conecta al sistema remoto a través de ssh.
$ vi sample.sh #!/bin/bash USERNAME=devops PASSWD=`cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 \ -iter 100000 -salt -pass pass:[email protected]#` REMOTE=10.20.0.20 sshpass -p $PASSWD ssh -o StrictHostKeyChecking=no [email protected]$REMOTE \ 'dmesg -Tx | grep -i error' > /tmp/a.tmp
guarde y cierre el archivo.
Haga que el script sea ejecutable ejecutando debajo del comando,
$ chmod +x sample.sh
Ahora ejecute el script para verificar si el cifrado se usa correctamente para conectarse al sistema remoto.
[[email protected] ~]$ ./sample.sh Or [[email protected] ~]$ bash -x sample.sh + USERNAME=devops ++ openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt \ -pass pass:[email protected]# ++ cat secret.txt + [email protected]#2 + REMOTE=10.20.0.20 + sshpass -p [email protected]#2 ssh -o StrictHostKeyChecking=no [email protected] \ 'dmesg -Tx | grep -i error'
Perfecto, la salida anterior confirma que el cifrado se descifra durante la ejecución.
Verifiquemos el contenido del archivo /tmp/a.tmp,
[[email protected] ~]$ cat /tmp/a.tmp kern :info : [Thu Jun 3 13:36:51 2021] RAS: Correctable Errors collector\ initialized. kern :err : [Thu Jun 3 13:36:53 2021] [drm:vmw_host_log [vmwgfx]] *ERROR*\ Failed to send log kern :err : [Thu Jun 3 13:36:53 2021] [drm:vmw_host_log [vmwgfx]] *ERROR* \ Failed to send log [[email protected] ~]$
El resultado anterior confirma que el script puede capturar el resultado del comando dmesg. Eso es todo del artículo. Espero que tenga una idea de cómo podemos usar una contraseña cifrada dentro de un script de shell.