Apakah ada cara untuk menghapus semua karakter yang saya masukkan dalam prompt kata sandi tersembunyi di Linux? Misalnya, ketika saya SSH ke server, ia meminta kata sandi saya di mana kunci yang dimasukkan tidak ditampilkan:
$ ssh root@somehost
root@somehost's password:
Apakah ada cara untuk menghapus semua teks yang saya masukkan tanpa harus menekan spasi mundur untuk jumlah waktu yang tidak diketahui? Ketika saya pikir saya memasukkan sesuatu yang salah, saya ingin memulai kembali dan menekan backspace selama beberapa detik itu mengganggu. Saya mencoba Esc, CtrlAsemoga memilih seluruh teks dan Home. CtrlCmembatalkan seluruh perintah dan saya harus mengirim perintah lagi untuk mencoba lagi. Ini hampir merupakan solusi terbaik dan tercepat tetapi masih belum memuaskan. Sisipan juga tidak berfungsi di shell saya.
sumber
ssh
dari skrip, Anda dapat menganalisis string parameter sebelum menjalankannya.su
menjadi root. Langkah selanjutnya adalah menonaktifkan skema otentikasi berbasis kata sandi di SSH dan menggunakan kunci untuk login.Jawaban:
Anda dapat menghapus seluruh kata sandi yang diketik dengan Ctrl+ U.
sumber
unix-line-discard
, yang dijelaskan sebagai "Bunuh mundur dari kursor ke awal baris saat ini." Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline adalah pustaka input yang digunakan oleh sebagian besar shell dan banyak program interaktif lainnya (tetapi tidak dibangun di dalam tty, jadi ini tidak akan dibangun dalam tty, jadi ini tidak akan bekerja di mana-mana ).stty kill
fungsi), yang mengapa ia bekerja dengan prompt password ssh.Tidak seperti
bash
,ssh
prompt kata sandi tidak menggunakan pustaka input terminal khusus sepertireadline
. Fitur pengeditan baris hanyalah fitur pengeditan baris POSIX TTY dasar.Jadi Anda memiliki POSIX TTY dalam mode "matang" (bukan mentah), alias mode kanonik, dan satu-satunya pengeditan baris yang tersedia adalah apa yang disediakan oleh kernel. Lihat
stty(1)
, dan perhatikan itukill = ^U
. Ini juga di mana karakter backspace didefinisikan (erase = ^?
). Word-erase (^W
) nyaman ketika Anda tidak mengetik buta.lnext = ^V
berarti Anda dapat mengetik control-v lalu apa saja (termasuk control-c) untuk mendapatkan kontrol-c secara literal.Untuk men-debug apa yang Anda coba lakukan secara membabi buta, jalankan
cat
ataucat > /dev/null
di terminal Anda . Ketik hal-hal, lalu lihat mana yang berhasil dan yang tidak perlu diedit.readline
(Digunakan olehbash
) membaca karakter mentah dan melakukan pengeditan baris di ruang pengguna. Binding default-nya kompatibel dengan karakter kontrol TTY default, meskipun, untuk subset dari fitur editing yang mereka berdua berikan.readline jauh melampaui pengeditan garis sederhana TTY biasa. (mis. TTY hanya dapat menghapus karakter di akhir baris, sehingga tidak ada
^a
dandelete
atau panah kiri / kanan)Ketika
bash
menjalankan perintah di latar depan, ia menempatkan TTY ke mode kanonik terlebih dahulu (karena itulah defaultnya). Jadi menjalankanstty -a
(tanpa pengalihan) akan selalu melihat terminalnya sendiri dalam mode kanonik. Tetapi jika Anda mengarahkan input dari beberapa TTY lain yang telahbash
berjalan di atasnya, Anda dapat melihat pengaturan terminal apa bash + readline diterapkan. mis.stty -a < /dev/pts/12
menunjukkan-icanon
untuk mode mentah karena sayabash
menjalankan di terminal itu. (Saya beralih ke tab lain dan berlaritty
, lalu menggunakan jalur file perangkat itu dari terminal pertama). Jika saya berlaricat
di terminal lain itu, saya akan melihaticanon
untuk mode kanonik.Terkait: TTY demistified
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface
sumber
stty
/ ioctl yang bash + readline itu sendiri telah diterapkan dalam mode mentah. (Dan fakta bahwa itu dalam mode mentah sama sekali, di mana sebagian besar karakter khusus tidak berlaku)