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


106

有没有办法删除我在Linux的隐藏密码提示中输入的所有字符?例如,当我SSH到服务器时,它会要求我输入未显示输入密钥的密码:

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

有没有一种方法可以删除我所有输入的文本,而无需在未知时间内按Backspace键?当我认为输入错误时,我想重新开始并按退格键几秒钟会很烦。我想EscCtrlA有希望选择整个文本HomeCtrlC取消整个命令,我必须再次发送命令以重试。这几乎是最好和最快的解决方案,但仍然不能令人满意。插入在我的外壳中也不起作用。


7
关于Ctrl + A,在终端中通常表示“转到行首”。终端中使用的密钥集(尤其是bash)通常更接近Emacs,而不是Windows。
Score_Un17年

18
以root身份登录通常被认为是非常非常糟糕的做法。
山姆

要从屏幕上删除字符,您将需要使用光标控制序列(如果您的终端支持它们)。通过ssh从脚本运行,可以在运行参数字符串之前对其进行分析。
AFH

4
请注意@Sam告诉的内容。您应该在所有位置禁用root登录。以复杂的密码以普通用户身份登录,然后su成为root用户。下一步是在SSH中禁用基于密码的身份验证方案,并使用密钥进行登录。
kostix

@kostix我很确定禁用密码应该是第一步。如果您使用密码,然后使用su和禁用的root用户,则只需输入攻击者在登录后第二次已经猜出的密码即可,因此只有在用户名很难猜到的情况下,您才可以获得一些信息(通常是这样) 't,我假设没有统计信息)。如果没有密码登录,它会添加第二个密码,即密码,但它的价值不如更长的私钥。
没人

Answers:


163

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


6
这也可以在常规终端提示中使用!
MoonRunestar

35
作为参考,这是readline的“ emacs模式”中默认的键绑定unix-line-discard,描述为“从光标向后退至当前行的开头”。参考:cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline是大多数shell和许多其他交互式程序使用的输入库(但不是内置于tty中,因此不会到处工作)。
IMSoP '17

22
@IMSoP然而,按Ctrl-U本身内置到TTY(作为默认的字符stty kill函数),这就是为什么它与SSH密码提示工作。
Random832 '17

5
顺便说一句,按下Ctrl + K是相当于用于从光标删除到线的。
wjandrea

2
@DennisJaheruddin:这是不可能的,ssh不使用readline提供行编辑。看我的答案。
彼得·科德斯

14

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

因此,您具有处于“煮熟”模式(不是原始模式)(又称为规范模式)的POSIX TTY,唯一可用的行编辑是内核提供的内容。看到stty(1)并注意到
kill = ^U。这也是定义退格字符(erase = ^?)的地方。^W当您不键入盲文时,单词擦除()很方便。

lnext = ^V 表示您可以键入control-v,然后输入任何内容(包括control-c)以获得文字的control-c。

要调试您想盲目执行的操作cat,请cat > /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://zh.wikipedia.org/wiki/POSIX_terminal_interface


您实际上可以只键入'stty'来查看所有当前设置。使用'stty rows ##'或'stty cols ##'将使您即时更改终端窗口可使用的行数或列数。当您通过VNC之类的东西在窗口中的窗口中工作时,这特别方便,它不一定能捕获外部窗口的正确大小。您基本上可以将活动区域定义为小于其所在的窗口,然后不必滚动。允许VI和其他东西仍然正常工作。它还可以重新映射退格键并即时删除。
罗文·霍金斯

@RowanHawkins:我的最后一段编辑得不好。立即修复。我试图指出,通过从另一个tty重定向,您可以看到sttybash + readline本身已在原始模式下应用的/ ioctl设置。(而且事实上它完全处于原始模式,大多数特殊字符都不适用)
Peter Cordes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.