Löschen Sie das eingegebene Passwort in der Eingabeaufforderung für versteckte Passwörter (Linux) mit der Verknüpfung

106

Gibt es eine Möglichkeit, alle Zeichen zu löschen, die ich unter Linux in einer Eingabeaufforderung für versteckte Kennwörter eingegeben habe? Wenn ich zum Beispiel eine SSH-Verbindung zu einem Server herstelle, frage ich nach meinem Passwort, wo die eingegebenen Schlüssel nicht angezeigt werden:

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

Gibt es eine Möglichkeit, meinen gesamten eingegebenen Text zu löschen, ohne die Rücktaste für eine unbekannte Zeitspanne drücken zu müssen? Wenn ich glaube, etwas falsch eingegeben zu haben, möchte ich noch einmal von vorne anfangen. Das Drücken der Rücktaste für einige Sekunden ist ärgerlich. Ich habe versucht Esc, CtrlAhoffentlich den ganzen Text auszuwählen und Home. CtrlCBricht den gesamten Befehl ab und ich muss den Befehl erneut senden, um es erneut zu versuchen. Dies ist fast die beste und schnellste Lösung, aber immer noch nicht zufriedenstellend. Insert funktioniert auch in meiner Shell nicht.

Bugybunny
quelle
7
In Bezug auf Strg + A bedeutet dies im Terminal normalerweise "Gehe zum Zeilenanfang". Der im Terminal verwendete Schlüsselsatz (insbesondere Bash) ist Emacs häufig näher als Windows.
Score_Under
18
Sshing als root wird allgemein als sehr, sehr schlechte Praxis angesehen.
Sam
Um Zeichen vom Bildschirm zu löschen, müssen Sie Cursorsteuerungssequenzen verwenden (sofern Ihr Terminal diese unterstützt). Durch Ausführen ssheines Skripts können Sie die Parameterzeichenfolge analysieren, bevor Sie sie ausführen.
AFH
4
Bitte achten Sie darauf, was @Sam gesagt hat. Sie sollten Root-Anmeldungen überall deaktivieren. Melden Sie sich als normaler Benutzer mit einem komplizierten Passwort an und suwerden Sie root. Der nächste Schritt besteht darin, kennwortbasierte Authentifizierungsschemata in SSH zu deaktivieren und Schlüssel für die Anmeldung zu verwenden.
Kostix
@kostix Ich bin mir ziemlich sicher, dass das Deaktivieren von Passwörtern der erste Schritt sein sollte. Wenn Sie Passwörter verwenden, müssen Sie bei su und deaktiviertem root lediglich das Passwort eingeben, das der Angreifer bereits ein zweites Mal nach der Anmeldung erraten hat. Sie erhalten also nur dann etwas, wenn der Benutzername schwer zu erraten ist (was häufig nicht der Fall ist nehme ich an, ohne Statistik zu haben). Und ohne Passwort Login fügt es ein zweites Geheimnis hinzu, das Passwort, aber dies ist weniger wert als der private Schlüssel, der ein längeres Geheimnis ist.
Niemand

Antworten:

163

Sie können das gesamte eingegebene Passwort mit Ctrl+ löschen U.

Ipor Sircer
quelle
6
Dies funktioniert auch in der regulären Terminal-Eingabeaufforderung!
MoonRunestar
35
Zu Referenzzwecken ist dies die Standardtastenbelegung in Readlines "Emacs-Modus" für unix-line-discard, beschrieben als "Zurück vom Cursor zum Anfang der aktuellen Zeile töten". Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline ist die Eingabebibliothek, die von den meisten Shells und vielen anderen interaktiven Programmen verwendet wird (jedoch nicht in das tty integriert ist, so dass dies nicht der Fall ist arbeiten überall ).
IMSoP
22
@IMSoP Strg-U selbst ist jedoch in das tty integriert (als Standardzeichen für die stty killFunktion), weshalb es mit der ssh-Passwortabfrage zusammenarbeitet.
Random832
5
BTW, Strg + K ist das Äquivalent von dem Cursor auf die zum Löschen Ende der Zeile.
wjandrea
2
@DennisJaheruddin: Das ist nicht möglich, ssh verwendet readline nicht zur Zeilenbearbeitung. Siehe meine Antwort.
Peter Cordes
14

Im Gegensatz zu bash, ssh‚s Passwortabfrage verwendet keine spezielle Terminal-Eingang Bibliothek wie readline. Die Zeilenbearbeitungsfunktionen sind nur die POSIX TTY-Grundfunktionen für die Zeilenbearbeitung.

Sie haben also eine POSIX TTY im "gekochten" Modus (nicht roh), auch bekannt als kanonischer Modus, und die einzige verfügbare Zeilenbearbeitung ist die vom Kernel bereitgestellte. Sehen Sie stty(1)und bemerken Sie das
kill = ^U. Hier wird auch das Backspace-Zeichen definiert ( erase = ^?). Das Löschen von Wörtern ( ^W) ist praktisch, wenn Sie nicht blind tippen.

lnext = ^V bedeutet, dass Sie control-v und dann alles (einschließlich control-c) eingeben können, um ein literales control-c zu erhalten.

Um zu debuggen, was Sie versucht haben, führen Sie catoder cat > /dev/nullin Ihrem Terminal . Geben Sie Zeug ein, und sehen Sie dann, was funktioniert und was nicht, um es zu bearbeiten.


readline(verwendet von bash) liest das rohe Zeichen und bearbeitet die Zeilen im User-Space. Die Standardbindungen sind jedoch mit den Standard-TTY-Steuerzeichen für die Teilmenge der Bearbeitungsfunktionen kompatibel, die beide bereitstellen.

readline geht weit über die einfache Zeilenbearbeitung eines normalen TTY hinaus. (zB ein TTY kann nur Zeichen am Ende der Zeile löschen, es gibt also keinen ^aund deleteoder Links / Rechts-Pfeil)

Wenn bashein Befehl im Vordergrund ausgeführt wird, wird der TTY zuerst in den kanonischen Modus versetzt (da dies die Standardeinstellung ist). Wenn Sie also ausführen stty -a(ohne Umleitung), wird immer ein eigenes Terminal im kanonischen Modus angezeigt. Wenn Sie jedoch Eingaben von einem anderen TTY umleiten bash, auf dem ausgeführt wird, können Sie sehen, welche Terminaleinstellungen Bash + Readline angewendet haben. ZB stty -a < /dev/pts/12zeigt -icanonfür RAW-Modus, weil ich bashauf diesem Terminal ein laufendes habe. (Ich habe zu einem anderen Tab gewechselt und bin ttydann diesen Gerätedateipfad vom ersten Terminal aus verwendet). Wenn ich catin diesem anderen Terminal icanonlaufen würde, würde ich nach dem kanonischen Modus suchen.

Verwandte: Der TTY entmystifiziert

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

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

Peter Cordes
quelle
Sie können einfach "stty" eingeben, um alle aktuellen Einstellungen anzuzeigen. Mit 'stty rows ##' oder 'stty cols ##' können Sie im Handumdrehen ändern, wie viele Zeilen oder Spalten dem Terminalfenster zur Verfügung stehen. Das ist besonders praktisch, wenn Sie in einem Fenster in einem Fenster durch etwas wie VNC arbeiten, das nicht unbedingt erfasst, wie groß Ihr Außenfenster ist. Grundsätzlich können Sie Ihren aktiven Bereich so definieren, dass er kleiner als das Fenster ist, in dem er sich befindet, und dann nicht mehr scrollen müssen. Zulassen, dass VI und andere Dinge weiterhin ordnungsgemäß funktionieren. Es kann auch die Rücktaste neu zuordnen und im laufenden Betrieb löschen.
Rowan Hawkins
@ Rowan Hawkins: Mein letzter Absatz wurde schlecht bearbeitet. Jetzt behoben. Ich habe versucht zu verdeutlichen, dass Sie durch Umleiten von einem anderen tty die stty/ ioctl-Einstellungen sehen können, die bash + readline selbst im Raw-Modus angewendet hat. (Und die Tatsache, dass es überhaupt im Raw-Modus ist, wo die meisten Sonderzeichen nicht zutreffen)
Peter Cordes