使用快捷方式在隐藏密码提示 (Linux) 中删除输入的密码

bug*_*nny 105 linux terminal keyboard-shortcuts passwords

有没有办法删除我在 Linux 中隐藏密码提示中输入的所有字符?例如,当我通过 SSH 连接到服务器时,它会在未显示输入的密钥的情况下询问我的密码:

$ ssh root@somehost
root@somehost's password:
Run Code Online (Sandbox Code Playgroud)

有没有办法删除我输入的所有文本而不必按退格键未知的时间?当我认为我输入了错误的内容时,我想重新开始并按退格键几秒钟很烦人。我试过EscCtrlA希望选择整个文本和Home. CtrlC取消整个命令,我必须再次发送命令才能重试。这几乎是最好和最快的解决方案,但仍然不能令人满意。Insert 在我的 shell 中也不起作用。

Ipo*_*cer 162

您可以使用Ctrl+删除整个输入的密码U

  • 作为参考,这是 readline 的“emacs 模式”中`unix-line-discard` 的默认键绑定,描述为“从光标向后杀死到当前行的开头”。参考:https://cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline 是大多数 shell 和许多其他交互式程序使用的输入库(但 * 未* 内置到 tty ,所以这不会*在任何地方*)。 (35认同)
  • @IMSoP 但是,Ctrl-U 本身 *is* 内置在 tty 中(作为 `stty kill` 函数的默认字符),这就是它与 ssh 密码提示一起使用的原因。 (22认同)
  • 这也适用于常规终端提示! (6认同)
  • 顺便说一句,Ctrl+K 相当于从光标删除到行的 *end*。 (5认同)
  • @DennisJaheruddin:这是不可能的,ssh 不使用 readline 来提供行编辑。看我的回答。 (2认同)

Pet*_*des 14

与 不同bashssh的密码提示不使用任何特殊的终端输入库,如readline. 行编辑功能只是基线 POSIX TTY 行编辑功能。

所以你有一个处于“熟”模式(不是原始模式)的 POSIX TTY,也就是规范模式,唯一可用的行编辑是内核提供的。看stty(1),并注意
kill = ^U。这也是定义退格字符 ( erase = ^?) 的地方。^W当您不盲打时,字擦除 ( ) 很方便。

lnext = ^V 意味着您可以输入 control-v 然后输入任何内容(包括 control-c)来获得文字 control-c。

要调试您试图盲目执行的操作,请运行catcat > /dev/null在您的终端中。输入内容,然后查看哪些有效,哪些无效以对其进行编辑。


readline(由bash)读取原始字符并在用户空间中进行行编辑。但是,它的默认绑定与默认 TTY 控制字符兼容,适用于它们都提供的编辑功能子集。

readline 远远超出了普通 TTY 的简单行编辑。(例如,TTY 只能删除行尾的字符,因此没有^adelete或左/右箭头)

bash在前台运行的命令,它把TTY为规范模式第一(因为这是默认值)。因此运行stty -a(没有重定向)将始终在规范模式下看到自己的终端。但是,如果您重定向来自bash在其上运行的其他某个 TTY 的输入,您可以看到应用了哪些终端设置 bash + readline。例如stty -a < /dev/pts/12显示-icanon原始模式,因为我bash在该终端上运行。(我切换到另一个选项卡并运行tty,然后从第一个终端使用该设备文件路径)。如果我cat在另一个终端中运行,我会看到icanon规范模式。

相关:TTY 揭秘

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

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