Bạn nên sử dụng mật khẩu mã hóa trong các file bash shell của Linux. Thông thường, trong file bash shell, chúng ta có thể cần mật khẩu cho người dùng từ xa trong khi kết nối với hệ thống từ xa, người dùng ftp và người dùng proxy, v.v. Trong bài viết này, mình sẽ đề cập đến cách mã hóa mật khẩu bằng openssl.
Mã hóa mật khẩu bằng Openssl
Giả sử chúng ta muốn kết nối với hệ thống từ xa qua ssh bằng mật khẩu bên trong tập lệnh shell. Để mã hóa mật khẩu, hãy sử dụng lệnh openssl dưới đây trong hệ thống linux của bạn.
$ echo "Hoanghd164" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \
-salt -pass pass:Secret@123#
Lưu ý: ‘ Hoanghd164’ là mật khẩu mà mình muốn mã hóa nó và ‘Secret@123#’ là mật khẩu được sử dụng trong quá trình mã hóa.
Để lưu mật khẩu đã mã hóa vào một file, hãy sử dụng lệnh sau
$ echo "Hoanghd164" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 \
-salt -pass pass:Secret@123# > ./secret.txt
Đặt các quyền sau trên file secret.txt bằng lệnh chmod
$ chmod 600 secret.txt
Giải mã mật khẩu được mã hóa bằng Openssl
Để giải mã mật khẩu, hãy chạy bên dưới
$ cat secret.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 \
-salt -pass pass:Secret@123#
Hoanghd164
Lưu ý: Mình đã sử dụng tùy chọn ‘-d’ để giải mã.
Sử dụng mật khẩu được mã hóa trong Bash Shell Script
Sử dụng file shell mẫu dưới đây sẽ sử dụng mật khẩu được mã hóa trong khi kết nối với hệ thống từ xa qua 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:Secret@123#`
REMOTE=10.20.0.20
sshpass -p $PASSWD ssh -o StrictHostKeyChecking=no $USERNAME@$REMOTE \
'dmesg -Tx | grep -i error' > /tmp/a.tmp
Lưu và đóng file, phân quyền cho file có thể thực thi được bằng cách chạy lệnh bên dưới.
$ chmod + x sample.sh
Chạy thử file sample.sh.
$ bash -x sample.sh
+ USERNAME=devops
++ openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt \
-pass pass:Secret@123#
++ cat secret.txt
+ PASSWD=Passw0rD@#2
+ REMOTE=10.20.0.20
+ sshpass -p Passw0rD@#2 ssh -o StrictHostKeyChecking=no devops@10.20.0.20 \
'dmesg -Tx | grep -i error'
Hoàn hảo, đầu ra ở trên xác nhận rằng mã hóa được giải mã trong quá trình thực thi. Hy vọng bạn có một ý tưởng về cách chúng tôi có thể sử dụng mật khẩu được mã hóa bên trong một tập lệnh shell.