![为什么在 tty 中输入用户名后密码提示会稍微滞后?](https://linux22.com/image/68968/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%20tty%20%E4%B8%AD%E8%BE%93%E5%85%A5%E7%94%A8%E6%88%B7%E5%90%8D%E5%90%8E%E5%AF%86%E7%A0%81%E6%8F%90%E7%A4%BA%E4%BC%9A%E7%A8%8D%E5%BE%AE%E6%BB%9E%E5%90%8E%EF%BC%9F.png)
我有这种行为,我不知道如何修复它,甚至不知道如何搜索修复它,因为我不知道如何称呼它。
这是发生的事情:
第一次启动时,当我输入用户名并按Retrun密码时,大约半秒或四分之一秒后会出现提示。问题是,在我输入用户名后,我通常会按下Return并立即开始输入密码;但是,由于Password:
尚未出现,因此tty
开始将我直接键入的字符打印到屏幕上。
例如,假设我的用户名和密码分别是:Username
和Password
。如果我要登录,tty1
它看起来会像这样。开头的“Pa”之所以存在,是因为我在Password:
实际出现之前就开始输入“Password”。
Debian GNU/Linux stretch/sid hostname tty1
hostname login: Username
PaPassword:
一个简单的解决方案当然是输入用户名并稍等一下,然后再输入密码,但是我希望深入了解并找到此问题的原因。我担心有一天提示可能会滞后超过四分之一秒(例如几秒钟),并且我会在Password:
最终出现之前不小心在屏幕上输入了整个密码。
有没有办法知道这里发生了什么?
答案1
TTY 的默认行为是回显(立即显示)用户在屏幕上键入的任何内容。这提供了按下按键的即时反馈。这是login:
显示提示时 TTY 设备所处的模式。
在询问密码之前,登录程序会进行系统调用以将 TTY 模式更改为不是回显键入的字符(以便您键入密码时不会显示密码)。但是,如果您在登录程序实际执行该系统调用之前开始键入字符,那么这些字符确实会显示。
询问密码后,登录程序将 TTY 回显模式设置回默认值(回显用户键入的内容)。
答案2
正如 @wurtel 在他的评论中所说,我相信登录过程正在被其他启动时进程与硬盘 I/O 结合进行时间切片。具有讽刺意味的答案是登录(当然!)并观察top
和/或iostat
和/或vmstat
在您尝试(再次)登录时查看系统正在忙着做什么。
我会说“永远等待密码提示”(因为您不想冒险将密码提供给错误的程序或人员!),但我将是第一个承认我已经这样做过很多次的人。我见过系统日志,其中用户明显混淆了用户名提示和密码提示,并且我们得到诸如“P@ssW0rD 登录失败”之类的系统日志。它可以是远程 ssh 会话、FTP 会话、任何在系统忙于执行其他操作时要求凭据的内容 - 我要指出的要点是,在提供输入之前,您应该确保获得正确的系统关注。