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.
quelle
ssh
eines Skripts können Sie die Parameterzeichenfolge analysieren, bevor Sie sie ausführen.su
werden Sie root. Der nächste Schritt besteht darin, kennwortbasierte Authentifizierungsschemata in SSH zu deaktivieren und Schlüssel für die Anmeldung zu verwenden.Antworten:
Sie können das gesamte eingegebene Passwort mit Ctrl+ löschen U.
quelle
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 ).stty kill
Funktion), weshalb es mit der ssh-Passwortabfrage zusammenarbeitet.Im Gegensatz zu
bash
,ssh
‚s Passwortabfrage verwendet keine spezielle Terminal-Eingang Bibliothek wiereadline
. 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 daskill = ^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
cat
odercat > /dev/null
in Ihrem Terminal . Geben Sie Zeug ein, und sehen Sie dann, was funktioniert und was nicht, um es zu bearbeiten.readline
(verwendet vonbash
) 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
^a
unddelete
oder Links / Rechts-Pfeil)Wenn
bash
ein Befehl im Vordergrund ausgeführt wird, wird der TTY zuerst in den kanonischen Modus versetzt (da dies die Standardeinstellung ist). Wenn Sie also ausführenstty -a
(ohne Umleitung), wird immer ein eigenes Terminal im kanonischen Modus angezeigt. Wenn Sie jedoch Eingaben von einem anderen TTY umleitenbash
, auf dem ausgeführt wird, können Sie sehen, welche Terminaleinstellungen Bash + Readline angewendet haben. ZBstty -a < /dev/pts/12
zeigt-icanon
für RAW-Modus, weil ichbash
auf diesem Terminal ein laufendes habe. (Ich habe zu einem anderen Tab gewechselt und bintty
dann diesen Gerätedateipfad vom ersten Terminal aus verwendet). Wenn ichcat
in diesem anderen Terminalicanon
laufen 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
quelle
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)