V linuxových bash shell skriptech se vždy doporučuje používat šifrovaná hesla. Typicky v bash shell skriptu můžeme potřebovat heslo pro vzdáleného uživatele při připojování ke vzdálenému systému, ftp uživatele a proxy uživatele atd. V tomto článku probereme, jak zašifrovat heslo pomocí příkazu openssl a poté uvidíme, jak lze toto zašifrované heslo používá se ve skriptu bash shell.
Šifrovat heslo pomocí Openssl
Předpokládejme, že se chceme připojit ke vzdálenému systému přes ssh pomocí hesla uvnitř skriptu shellu. Chcete-li zašifrovat heslo, použijte níže uvedený příkaz openssl ve vašem linuxovém systému.
$ echo "[email protected]#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]#
Poznámka: Řetězec následovaný příkazem echo „[email protected]#2“ je řetězec hesla, kterým jej chceme zašifrovat, a „[email protected]#“ je heslo, které se používá během šifrování. Pokud je verze openssl 1.1.0 nebo nižší, přeskočte tyto dvě možnosti ‚-pbkdf2 -iter 100000‘
Chcete-li uložit zašifrované heslo do souboru, použijte následující příkaz
$ echo "[email protected]#2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]# > secret.txt
Nastavte následující oprávnění pro soubor secret.txt pomocí příkazu chmod,
$ chmod 600 secret.txt
Dešifrování zašifrovaného hesla pomocí Openssl
Chcete-li heslo dešifrovat, spusťte níže
$ cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 \ -salt -pass pass:[email protected]# [email protected]#2 $
Poznámka: Pokud jste si pozorně všimli, použili jsme k dešifrování volbu „-d“.
Použít šifrované heslo ve skriptu Bash Shell
Použijte níže ukázkový skript shellu, který bude používat šifrované heslo při připojování ke vzdálenému systému přes 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
uložte a zavřete soubor.
Udělejte skript spustitelným spuštěním pod příkazem
$ chmod +x sample.sh
Nyní spusťte skript a ověřte, zda je šifrování úspěšně použito pro připojení ke vzdálenému systému.
[[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'
Perfektní, výše uvedený výstup potvrzuje, že šifrování je během provádění dešifrováno.
Pojďme ověřit obsah souboru /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] ~]$
Výše uvedený výstup potvrzuje, že skript je schopen zachytit výstup příkazu dmesg. To je z článku vše. Doufám, že máte představu, jak můžeme použít šifrované heslo uvnitř skriptu shellu.