Apa cara paling sederhana untuk menyembunyikan input pengguna?
Tidak menampilkannya!
Menyembunyikan kata sandi saat sedang diketik adalah tradisi lama. Masuk akal dari perspektif keamanan dalam sebagian besar konteks: jika seseorang melihat dari atas bahu Anda, Anda tidak ingin membuatnya mudah untuk melihat apa yang Anda ketikkan. (Beberapa pedoman keamanan modern misalnya 1 2 3 4 5 merekomendasikan untuk memiliki opsi untuk membuat kata sandi terlihat, karena hal itu memungkinkan pengguna untuk dapat memilih kata sandi yang lebih rumit dan memiliki keyakinan bahwa mereka tidak akan menghabiskan waktu mereka memperbaiki kata sandi yang tidak terlihat. kesalahan ketik. Risiko terbesar bukan berselancar bahu, itu menebak dengan kasar, mungkin offline.)
Setelah memutuskan bahwa kata sandi harus disembunyikan, pelaksana harus memutuskan bagaimana melakukannya. Terminal memiliki mode di mana input pengguna ditampilkan (echo on), dan mode di mana input pengguna tidak ditampilkan (echo off). Mode gema off memiliki keberadaan intrinsik dengan cara: itu adalah mode di mana terminal tidak melakukan pekerjaan ekstra input gema pengguna. Mode ini juga harus ada untuk aplikasi di mana mengetikkan kunci tidak memasukkan karakter itu, tetapi sebaliknya meminta beberapa pintasan aplikasi yang terikat ke kunci itu. Jadi perintah seperti passwd
hanya mengatur terminal ke mode gema saat mereka sedang membaca kata sandi.
Mencetak tanda bintang untuk setiap karakter akan membutuhkan kerja implementasi tambahan hanya untuk keuntungan yang relatif kecil, yang passwd
belum ingin dilakukan oleh pelaksana perintah. Tidak ada mode terminal untuk mencetak tanda bintang karena itu akan menjadi fitur yang sangat khusus, hanya berguna ketika memasukkan kata sandi.
Omong-omong, jika Anda ingin melihat kata sandi ketika mengubahnya, Anda dapat menggunakan cat | passwd
(setidaknya pada beberapa sistem - beberapa versi passwd
memerlukan opsi seperti cat | passwd --stdin
dan beberapa tidak menerima ini sama sekali). (Anda bahkan dapat melakukannya { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, tetapi jangan lakukan itu: itu akan menyimpan kata sandi dalam sejarah shell, yang darinya ada banyak risiko bocor.) Mengaturnya dengan perintah yang membaca kata sandi dari terminal daripada apa pun yang ada input standar mereka, seperti sudo
atau ssh
, lebih kompleks; jika Anda memiliki GUI, Anda dapat menggunakan ssh-askpass yang menunjukkan berapa banyak karakter yang Anda ketikkan ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
untuk sudo; untuk ssh itu rumit ketika Anda memintanya dari terminal).