Hapus kata sandi yang dimasukkan dalam prompt kata sandi tersembunyi (Linux) dengan pintasan

106

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.

bugybunny
sumber
7
Mengenai Ctrl + A, di terminal ini biasanya berarti "pergi ke awal baris". Set kunci yang digunakan di terminal (terutama bash) seringkali lebih dekat ke Emacs daripada ke Windows.
Score_Di bawah
18
Menabur sebagai root umumnya dianggap praktik yang sangat sangat buruk.
Sam
Untuk menghapus karakter dari layar, Anda harus menggunakan urutan kontrol kursor (jika terminal Anda mendukungnya). Dengan menjalankan sshdari skrip, Anda dapat menganalisis string parameter sebelum menjalankannya.
AFH
4
Mohon perhatikan apa yang dikatakan @Sam. Anda harus menonaktifkan login root di mana saja. Masuk sebagai pengguna biasa dengan kata sandi yang rumit dan kemudian sumenjadi root. Langkah selanjutnya adalah menonaktifkan skema otentikasi berbasis kata sandi di SSH dan menggunakan kunci untuk login.
kostix
@kostix Saya cukup yakin menonaktifkan kata sandi harus menjadi langkah pertama. Jika Anda menggunakan kata sandi, kemudian dengan su dan menonaktifkan root, itu hanya masalah memasukkan kata sandi yang sudah ditebak penyerang untuk kedua kalinya setelah masuk, jadi Anda hanya mendapatkan sesuatu jika nama pengguna sulit ditebak (yang sering kali tidak , saya berasumsi tanpa memiliki statistik). Dan tanpa login kata sandi menambahkan rahasia kedua, kata sandi, tetapi ini bernilai kurang dari kunci pribadi yang merupakan rahasia lagi.
Tidak seorang pun

Jawaban:

163

Anda dapat menghapus seluruh kata sandi yang diketik dengan Ctrl+ U.

Ipor Sircer
sumber
6
Ini juga berfungsi di terminal prompt reguler juga!
MoonRunestar
35
Sebagai referensi, ini adalah pengikatan kunci default pada "emacs mode" readline untuk 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 ).
IMSoP
22
@IMSoP Namun, Ctrl-U itu sendiri adalah dibangun ke tty (sebagai karakter default untuk stty killfungsi), yang mengapa ia bekerja dengan prompt password ssh.
Random832
5
BTW, Ctrl + K adalah setara untuk menghapus dari kursor ke akhir baris.
wjandrea
2
@ DennisJaheruddin: Itu tidak mungkin, ssh tidak menggunakan readline untuk menyediakan pengeditan baris. Lihat jawaban saya.
Peter Cordes
14

Tidak seperti bash, sshprompt kata sandi tidak menggunakan pustaka input terminal khusus seperti readline. 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 itu
kill = ^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 catatau cat > /dev/nulldi terminal Anda . Ketik hal-hal, lalu lihat mana yang berhasil dan yang tidak perlu diedit.


readline(Digunakan oleh bash) 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 ^adan deleteatau panah kiri / kanan)

Ketika bashmenjalankan perintah di latar depan, ia menempatkan TTY ke mode kanonik terlebih dahulu (karena itulah defaultnya). Jadi menjalankan stty -a(tanpa pengalihan) akan selalu melihat terminalnya sendiri dalam mode kanonik. Tetapi jika Anda mengarahkan input dari beberapa TTY lain yang telah bashberjalan di atasnya, Anda dapat melihat pengaturan terminal apa bash + readline diterapkan. mis. stty -a < /dev/pts/12menunjukkan -icanonuntuk mode mentah karena saya bashmenjalankan di terminal itu. (Saya beralih ke tab lain dan berlari tty, lalu menggunakan jalur file perangkat itu dari terminal pertama). Jika saya berlari catdi terminal lain itu, saya akan melihat icanonuntuk 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

Peter Cordes
sumber
Anda sebenarnya dapat mengetik 'stty' untuk melihat semua pengaturan saat ini. Menggunakan 'stty rows ##' atau 'stty cols ##' akan memungkinkan Anda mengubah pada Fly, berapa banyak baris atau kolom yang disediakan oleh jendela terminal. Yang sangat berguna ketika Anda bekerja di jendela di jendela melalui sesuatu seperti VNC yang tidak selalu menangkap seberapa besar jendela eksterior Anda dengan benar. Pada dasarnya Anda dapat Tentukan area aktif Anda menjadi lebih kecil dari jendela yang ada di dalamnya dan kemudian tidak perlu menggulir ke sekitarnya. Mengizinkan VI dan hal-hal lain untuk tetap berfungsi dengan baik. Itu juga dapat memetakan kembali backspace dan menghapus on the Fly.
Rowan Hawkins
@RowanHawkins: paragraf terakhir saya diedit dengan buruk. Diperbaiki sekarang Saya mencoba untuk membuat titik bahwa dengan mengarahkan ulang dari tty lain, Anda dapat melihat pengaturan 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)
Peter Cordes