Saya mencoba membuat pengguna dengan kata sandi melalui ssh (dengan izin root) seperti ini:
ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser
Dengan melakukan itu, saya bisa berhasil membuat akun bernama newuser
, tetapi saya tidak bisa masuk dengan kata sandi yang diharapkan (yaitu 1234
)
Tidak ada bedanya jika saya menambahkan tanda kutip ganda:
ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser"
Dan kemudian saya bertanya-tanya apakah saya dapat menghasilkan kata sandi hash dan menyimpannya sebagai variabel secara lokal, tetapi masih tidak berhasil.
password=$(openssl passwd -1 1234)
ssh [email protected] "useradd -p $password newuser"
Apakah ada sesuatu yang saya rindukan? Terima kasih sebelumnya!
command-line
ssh
password
users
amigcamel
sumber
sumber
Jawaban:
Ini adalah masalah kutipan klasik.
Masalah: Tanpa mengutip atau mengutip dua kali substitusi perintah (
$()
) dan ekspansi variabel ($
kata sandi hash yang dikembalikan denganopenssl
diperlakukan sebagai indikator variabel) sedang dilakukan di lingkungan lokal, bukan pada shell jarak jauh.Solusi: gunakan tanda kutip tunggal di sekitar
useradd
perintah yang digunakanssh
pada shell lokal untuk mencegah substitusi perintah dan ekspansi variabel pada lingkungan lokal, biarkan ekspansi berlangsung pada shell remote non-login, non-interaktif:Perhatikan kutipannya.
Masalah keamanan:
root
Login SSH harus dinonaktifkan, jika Anda harus mengaktifkannya hanya otentikasi berbasis kunci yang diizinkanMD5 sudah rusak, dan tanpa garam Anda menjadi sasaran serangan tabel Rainbow sederhana (bahkan tidak perlu serangan paksa / kamus);
openssl passwd
tidak menghasilkan garam acak. Bagaimanapun, Anda harus benar-benar mempertimbangkan menggunakan SHA-2 dengan garamKata sandi yang dikirimkan sebagai argumen untuk perintah mungkin terlihat oleh proses lain dalam sistem (jarak jauh); ini tergantung pada bagaimana Anda di
procfs
-mount (lihathidepid
), dan jika perintah sedang menulis ulang sendiri (hal ini mungkin tidak)sumber
crypt(3)
Linux dan ditandai dengan$1$
pengenal tidak sama dengan algoritma hash MD5 biasa, dengan cara yang sama seperti kata sandi$5$
dan$6$
hash tidak polos SHA-256 dan SHA-512. . Metode berbasis MD5 memiliki sejumlah iterasi, yang merupakan masalah terbesar dengannya.Seperti yang dicatat oleh @heemayl, algoritma hash kata sandi MD5 sudah tua, dan sistem saat ini menggunakan hash kata sandi berbasis SHA-2 yang lebih baru, yang memiliki faktor kerja yang dapat disesuaikan. Tetapi alat baris perintah OpenSSL tampaknya tidak mendukung itu.
The
chpasswd
utilitas , bagaimanapun, akan memungkinkan Anda untuk mengubah password dari pengguna sesuai dengan pengaturan sistem.Ini akan memungkinkan Anda untuk membuat pengguna baru dan mengubah kata sandi mereka di ujung jarak jauh.
chpasswd
mengambil nama pengguna dan kata sandi dari stdin, bukan baris perintah. Ini sebenarnya merupakan keuntungan karena argumen baris perintah terlihat untuk semua proses lain pada sistem, jadi jika dijalankanopenssl passwd
pada remote, kata sandi akan terlihat sementara untuk semua proses pada sistem.Saya tidak yakin apakah ada utilitas baris perintah yang sudah jadi untuk menghasilkan hash kata sandi yang dikenal dengan
crypt(3)
fungsi sistem . Perl memilikicrypt
fungsi bawaan, tetapi garam yang tepat masih perlu dihasilkan.sumber