Cara Menggunakan Kata Sandi Terenkripsi di Bash Script
Diterbitkan: 2022-01-29Jika Anda terpaksa menggunakan skrip Linux untuk terhubung ke sumber daya yang dilindungi kata sandi, Anda mungkin merasa tidak nyaman untuk memasukkan kata sandi itu ke dalam skrip. OpenSSL memecahkan masalah itu untuk Anda.
Kata sandi dan Script
Bukan ide yang bagus untuk memasukkan kata sandi ke dalam skrip shell. Sebenarnya, itu ide yang sangat buruk. Jika skrip jatuh ke tangan yang salah, semua orang yang membacanya dapat melihat apa kata sandinya. Tetapi jika Anda terpaksa menggunakan skrip, apa lagi yang bisa Anda lakukan?
Anda dapat memasukkan kata sandi secara manual ketika proses mencapai titik itu, tetapi jika skrip akan berjalan tanpa pengawasan, itu tidak akan berfungsi. Untungnya, ada alternatif untuk mengkodekan kata sandi ke dalam skrip. Secara berlawanan, ia menggunakan kata sandi yang berbeda untuk mencapai ini, bersama dengan beberapa enkripsi yang kuat.
Dalam skenario contoh kami, kami perlu membuat koneksi jarak jauh ke komputer Fedora Linux dari komputer Ubuntu kami. Kami akan menggunakan skrip shell Bash untuk membuat koneksi SSH ke komputer Fedora. Skrip harus berjalan tanpa pengawasan, dan kami tidak ingin memasukkan kata sandi untuk akun jarak jauh di skrip. Kami tidak dapat menggunakan kunci SSH dalam kasus ini, karena kami berpura-pura tidak memiliki kontrol atau hak admin atas komputer Fedora.
Kami akan menggunakan toolkit OpenSSL yang terkenal untuk menangani enkripsi dan utilitas bernama sshpass
untuk memasukkan kata sandi ke dalam perintah SSH.
TERKAIT: Cara Membuat dan Menginstal Kunci SSH Dari Shell Linux
Menginstal OpenSSL dan sshpass
Karena banyak alat enkripsi dan keamanan lainnya menggunakan OpenSSL, itu mungkin sudah diinstal di komputer Anda. Namun, jika tidak, hanya perlu beberapa saat untuk menginstal.
Di Ubuntu, ketik perintah ini:
sudo apt get openssl
Untuk menginstal sshpass
, gunakan perintah ini:
sudo apt install sshpass
Di Fedora, Anda perlu mengetik:
sudo dnf install openssl
Perintah untuk menginstal sshpass
adalah:
sudo dnf instal sshpass
Di Manjaro Linux, kita dapat menginstal OpenSSL dengan:
sudo pacman -Sy openssl
Terakhir, untuk menginstal sshpass
, gunakan perintah ini:
sudo pacman -Sy sshpass
Mengenkripsi pada Baris Perintah
Sebelum kita mulai menggunakan perintah openssl
dengan skrip, mari kita mengenalnya dengan menggunakannya di baris perintah. Katakanlah kata sandi untuk akun di komputer jarak jauh adalah rusty!herring.pitshaft
. Kami akan mengenkripsi kata sandi itu menggunakan openssl
.
Kami perlu memberikan kata sandi enkripsi saat melakukannya. Sandi enkripsi digunakan dalam proses enkripsi dan dekripsi. Ada banyak parameter dan opsi dalam perintah openssl
. Kami akan melihat masing-masing dalam beberapa saat.
echo 'rusty! herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'
Kami menggunakan echo
untuk mengirim kata sandi akun jarak jauh melalui pipa dan masuk ke perintah openssl
.
Parameter openssl
adalah:
- enc -aes-256-cbc : Jenis penyandian. Kami menggunakan cipher kunci 256-bit Standar Enkripsi Lanjutan dengan cipher-block chaining.
- -md sha512 : Jenis intisari pesan (hash). Kami menggunakan algoritma kriptografi SHA512.
- -a : Ini memberitahu
openssl
untuk menerapkan pengkodean base-64 setelah fase enkripsi dan sebelum fase dekripsi. - -pbkdf2 : Menggunakan Fungsi Derivasi Kunci Berbasis Kata Sandi 2 (PBKDF2) mempersulit serangan brute force untuk berhasil menebak kata sandi Anda. PBKDF2 membutuhkan banyak komputasi untuk melakukan enkripsi. Seorang penyerang perlu mereplikasi semua perhitungan itu.
- -iter 100000 : Menyetel jumlah komputasi yang akan digunakan PBKDF2.
- -salt : Menggunakan nilai garam yang diterapkan secara acak membuat keluaran terenkripsi berbeda setiap saat, meskipun teks biasa sama.
- -pass pass:'pick.your.password' : Kata sandi yang harus kami gunakan untuk mendekripsi kata sandi jarak jauh terenkripsi. Gantikan
pick.your.password
dengan kata sandi pilihan Anda.
Versi terenkripsi dari kata sandi rusty!herring.pitshaft
kami ditulis ke jendela terminal.
Untuk mendekripsi ini, kita perlu meneruskan string terenkripsi itu ke openssl
dengan parameter yang sama yang kita gunakan untuk mengenkripsi, tetapi menambahkan opsi -d
(dekripsi).
echo U2FsdGVkX19iiiRNhEsG+wm/uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'
String didekripsi, dan teks asli kita—kata sandi untuk akun pengguna jarak jauh—ditulis ke jendela terminal.
Itu membuktikan bahwa kami dapat dengan aman mengenkripsi kata sandi akun pengguna jarak jauh kami. Kami juga dapat mendekripsi ketika kami membutuhkannya menggunakan kata sandi yang kami berikan pada fase enkripsi.
Tetapi apakah ini benar-benar memperbaiki situasi kita? Jika kita memerlukan kata sandi enkripsi untuk mendekripsi kata sandi akun jarak jauh, pasti kata sandi dekripsi harus ada di skrip? Ya, memang begitu. Tetapi kata sandi akun pengguna jarak jauh terenkripsi akan disimpan dalam file tersembunyi yang berbeda. Izin pada file akan mencegah siapa pun kecuali Anda—dan pengguna root sistem, tentu saja—mengaksesnya.
Untuk mengirim output dari perintah enkripsi ke file, kita dapat menggunakan redirection. File tersebut bernama “.secret_vault.txt.” Kami telah mengubah kata sandi enkripsi menjadi sesuatu yang lebih kuat.
echo 'rusty! herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' > .secret_vault.txt
Tidak ada yang terlihat terjadi, tetapi kata sandi dienkripsi dan dikirim ke file “.secret_vault.txt”.
Kami dapat menguji apakah itu berfungsi dengan mendekripsi kata sandi di file tersembunyi. Perhatikan bahwa kita menggunakan cat
di sini, bukan echo
.
cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password'
Kata sandi berhasil didekripsi dari data dalam file. Kami akan menggunakan chmod
untuk mengubah izin pada file ini sehingga tidak ada orang lain yang dapat mengaksesnya.
chmod 600 .secret_vault.txt
ls -l .secret_vault.txt
Menggunakan topeng izin 600 menghapus semua akses untuk siapa pun selain pemilik file. Sekarang kita dapat melanjutkan untuk menulis skrip kita.
TERKAIT: Cara Menggunakan Perintah chmod di Linux
Menggunakan OpenSSL dalam Script
Skrip kami cukup sederhana:
#!/bin/bash # nama akun jarak jauh REMOTE_USER=geek # kata sandi untuk akun jarak jauh REMOTE_PASSWD=$(cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password') # komputer remot REMOTE_LINUX=fedora-34.local # sambungkan ke komputer jarak jauh dan masukkan stempel waktu ke dalam file bernama script.log sshpass -p $REMOTE_PASSWD ssh -T $REMOTE_USER@$REMOTE_LINUX << _remote_commands echo $USER "-" $(tanggal) >> /home/$REMOTE_USER/script.log _remote_commands
- Kami menetapkan variabel yang disebut
REMOTE_USER
ke "geek." - Kami kemudian menetapkan variabel yang disebut
REMOTE_PASSWD
ke nilai kata sandi yang didekripsi yang diambil dari file “.secret_vault.txt”, menggunakan perintah yang sama yang kami gunakan beberapa saat yang lalu. - Lokasi komputer jarak jauh disimpan dalam variabel yang disebut
REMOTE_LINUX
.
Dengan informasi tersebut, kita dapat menggunakan perintah ssh
untuk terhubung ke komputer jarak jauh.
- Perintah
sshpass
adalah perintah pertama pada jalur koneksi. Kami menggunakannya dengan opsi-p
(kata sandi). Ini memungkinkan kita menentukan kata sandi yang harus dikirim ke perintahssh
. - Kami menggunakan opsi
-T
(nonaktifkan alokasi terminal semu) denganssh
karena kami tidak perlu memiliki pseudo-TTY yang dialokasikan untuk kami di komputer jarak jauh.
Kami menggunakan dokumen singkat di sini untuk meneruskan perintah ke komputer jarak jauh. Segala sesuatu di antara dua string _remote_commands
dikirim sebagai instruksi ke sesi pengguna di komputer jarak jauh—dalam hal ini, ini adalah satu baris skrip Bash.
Perintah yang dikirim ke komputer jarak jauh hanya mencatat nama akun pengguna dan stempel waktu ke file bernama "script.log."
Salin dan tempel skrip ke editor dan simpan ke file bernama “go-remote.sh.” Ingatlah untuk mengubah detail untuk mencerminkan alamat komputer jarak jauh Anda sendiri, akun pengguna jarak jauh, dan kata sandi akun jarak jauh.
Gunakan chmod
untuk membuat skrip dapat dieksekusi.
chmod +x go-remote.sh
Yang tersisa hanyalah mencobanya. Mari kita jalankan skrip kita.
./go-remote.sh
Karena skrip kami adalah templat minimalis untuk skrip tanpa pengawasan, tidak ada keluaran ke terminal. Tetapi jika kita memeriksa file "script.log" di komputer Fedora, kita dapat melihat bahwa koneksi jarak jauh telah berhasil dibuat dan file "script.log" telah diperbarui dengan stempel waktu.
kucing script.log
Kata Sandi Anda Pribadi
Kata sandi akun jarak jauh Anda tidak dicatat dalam skrip.
Dan meskipun kata sandi dekripsi adalah, dalam skrip, tidak ada orang lain yang dapat mengakses file ".secret_vault.txt" Anda untuk mendekripsi dan mengambil kata sandi akun jarak jauh.