Kısayol ile gizli şifre isteminde (Linux) girilen şifreyi silin


106

Linux'ta gizli bir şifre isteminde girdiğim tüm karakterleri silmenin bir yolu var mı? Örneğin, bir sunucuya SSH verdiğimde, girilen tuşların gösterilmediği yerde şifremi sorar:

$ ssh root@somehost
root@somehost's password:

Girdiğim tüm metni silmek için bilinmeyen bir süre geri tuşuna basmadan bir yol var mı? Yanlış bir şey girdiğimi düşündüğümde baştan başlamak istiyorum ve birkaç saniye geri tuşuna basmak can sıkıcı. Denedim Esc, CtrlAumarım bütün metni seçmek için ve Home. CtrlCtüm komutu iptal eder ve yeniden denemek için komutu tekrar göndermem gerekir. Bu neredeyse en iyi ve en hızlı çözümdür ancak yine de tatmin edici değildir. Insert benim kabuğumda da çalışmıyor.


7
Ctrl + A ile ilgili olarak, terminalde bu genellikle "satır başlangıcına git" anlamına gelir. Terminalde kullanılan tuş takımı (özellikle bash) genellikle Emacs'a Windows'tan daha yakındır.
Score_Under

18
Kök olarak sshing genellikle çok çok kötü bir uygulama olarak kabul edilir.
Sam

Karakterleri ekrandan silmek için imleç kontrol dizilerini kullanmanız gerekecektir (terminaliniz destekliyorsa). Çalıştırarak sshbunu çalıştırmadan önce bir komut dosyasından, parametre dizesini analiz edebilirsiniz.
AFH

4
Lütfen @Sam'ın söylediğine dikkat edin. Her yerde kök girişlerini devre dışı bırakmalısın. Karmaşık bir şifreyle normal bir kullanıcı olarak oturum açın ve ardından suroot olun. Bir sonraki adım SSH'de parola tabanlı kimlik doğrulama şemalarını devre dışı bırakmak ve oturum açmak için tuşları kullanmaktır.
kostix

@kostix Şifreleri devre dışı bırakmak ilk adım olduğundan eminim. Şifreleri kullanıyorsanız, su ve engelli kökü kullanıyorsanız, saldırganın oturum açtıktan sonra ikinci kez tahmin ettiği şifreyi girmeniz yeterlidir; bu nedenle, yalnızca kullanıcı adının tahmin edilmesi zorsa (genellikle bu t, istatistiklere sahip olmadan varsayıyorum). Ve şifre girişi olmadan, ikinci bir sır, şifre ekler, ancak bu daha uzun bir sır olan özel anahtardan daha düşük bir değerdir.
Hiç kimse

Yanıtlar:


163

Tüm şifreyi Ctrl+ ile silebilirsiniz U.


6
Bu aynı zamanda normal terminal isteminde de çalışır!
MoonRunestar

35
Başvuru için, bu, "İmlecten unix-line-discardgeçerli satırın başlangıcına kadar geriye doğru sonlandır" olarak tanımlanan, okuma satırının "emacs modunda" varsayılan tuş bağlamadır . Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU taleb en kabukları ve diğer birçok interaktif programlar tarafından kullanılan giriş kütüphanesidir (ama değil tty'den yerleşik, bu nedenle bu olmaz her yerde çalış ).
IMSoP

22
Ancak @IMSoP Ctrl-U kendisi olduğunu (varsayılan karakter olarak tty'den yerleşik stty killo ssh şifre istemi ile çalışır neden, fonksiyonu).
Random832

5
BTW, Ctrl + K, imleçten satır sonuna kadar silmek için eşdeğerdir .
wjandrea

2
@DennisJaheruddin: Bu mümkün değil, ssh satır düzenlemeyi sağlamak için readline kullanmıyor. Cevabımı gör.
Peter Cordes

14

Bunun aksine bash, sshparola istemi gibi hiçbir özel terminal giriş kütüphanesi kullanmaz readline. Çizgi düzenleme özellikleri, yalnızca temel POSIX TTY çizgi düzenleme özellikleridir.

Yani "pişmiş" modda (ham değil), kanonik modda bir POSIX TTY'niz var ve kullanılabilir olan tek satır düzenleme çekirdek tarafından sağlananlar. Bakın stty(1)ve bunu fark edin
kill = ^U. Bu aynı zamanda geri alma karakterinin tanımlandığı yerdir ( erase = ^?). Kelime silme ( ^W), kör yazmadığınızda kullanışlıdır.

lnext = ^V kontrol kelimesini almak için kontrol-v yazdıktan sonra herhangi bir şey (kontrol-c dahil) yazabilirsiniz.

Kör olarak yapmaya çalıştığınız şeyi hata ayıklamak için, koşun catveya cat > /dev/nullterminalinizde . Stuff yazın, sonra neyin işe yarayıp neyin düzenlemediğini görün.


readline(tarafından kullanılır bash) ham karakteri okur ve kullanıcı alanında satır düzenlemesini yapar. Varsayılan ciltlemeleri, her ikisinin de sağladığı düzenleme özellikleri alt kümesi için varsayılan TTY kontrol karakterleriyle uyumludur.

readline, basit bir TTY'nin basit satır düzenlemesinin ötesine geçiyor. (örneğin, bir TTY yalnızca satırın sonundaki karakterleri silebilir, bu nedenle hiçbir ^ave deletesol / sağ ok yoktur)

Ne zaman bashön planda bir komutu çalıştırır (varsayılan çünkü), ilk kurallı moduna TTY'yi koyar. Böylece çalışan stty -a(yönlendirme olmadan) her zaman kanonik modda kendi terminalini görecektir. Ancak, girişi bashüzerinde çalışan bazı TTY'lerden girişi yönlendirirseniz , hangi terminal ayarlarının bash + readline uygulandığını görebilirsiniz. Örneğin ham modu stty -a < /dev/pts/12gösterir -icanonçünkü basho terminalde bir çalışma var. (Başka bir sekmeye geçtim ve koştum tty, ardından ilk terminalden bu aygıt dosyası yolunu kullandım). Koştum Eğer catbu diğer terminalde, ben görmek istiyorum icanonkanonik modu için.

İlgili: TTY parçalanmış

https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html

https://en.wikipedia.org/wiki/POSIX_terminal_interface


Tüm mevcut ayarları görmek için aslında sadece 'stty' yazabilirsiniz. 'Stty row ##' veya 'stty cols ##' komutunu kullanmanız, Terminal penceresinde kullanabileceğiniz kaç satır veya sütunu kullanmanıza izin verecektir. Dış pencerenizin ne kadar büyük olabileceğini tam olarak yakalamayan VNC gibi bir şey aracılığıyla bir pencerede bir pencerede çalışırken özellikle kullanışlıdır. Temel olarak aktif alanınızı içinde bulunduğu pencereden daha küçük olacak şekilde tanımlayabilirsiniz ve sonra kaydırmanız gerekmez. VI ve diğerlerinin hala düzgün çalışmasına izin vermek. Ayrıca geri çekilebilir ve Anında silinebilir.
Rowan Hawkins

@RowanHawkins: Son paragrafım çok iyi düzenlendi. Şimdi düzeltildi. Başka bir tty yönlendirerek stty, bash + readline'ın ham modda uyguladığı / ioctl ayarlarını görebildiğinize işaret etmeye çalışıyordum . (Özel karakterlerin çoğunun uygulanmadığı yerlerde hiç ham modda olduğu gerçeği)
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.