Короткий Ответ:
я испытывал эту проблему, и проблема заключалась в том, что в /etc/ssh/sshd_config была нарушена политика. Мое было то, что AllowUsers был установлен, и я пытался войти в систему как пользователь, который еще не существует в системе.
Больше Ответов
более подробный ответ заключается в том, что пароль был заменен. На самом деле он не был пустым. Так уж получилось, что первая строчка имел не отображаемый символ пробела (^H) и новую строку. Команда read, которую я использовал, считывала только первую строку в переменную. После использования cat на stdin полное содержание (как показано vim с: set list) было
"^H$
^M^?INCORRECT^@"
знак доллара - новая строка.
после некоторого рытья мы нашли это в источнике openssh код
https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth-pam.c#L1198
, который показывает пароль перезаписывается
https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth-pam.c#L234
, который содержит символы, которые мы ожидали. Комментарии объясняют почему:
/*
* If the user logging in is invalid, or is root but is not permitted
* by PermitRootLogin, use an invalid password to prevent leaking
* information via timing (eg if the PAM config has a delay on fail).
*/
логика проверки, используемая для пометки authctxt->действует в качестве ложного здесь
https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth.c#L98
который излагает все причины, по которым пользователь/пароль может быть недействительным.
Edit: я обновил ссылки, чтобы заблокировать конкретный коммит, чтобы они оставались правильными. Хотя код изменил поведение не имеет.