Удалить введенный пароль в подсказке скрытого пароля (Linux) с помощью ярлыка

106

Есть ли способ удалить все символы, которые я ввел в запросе скрытого пароля в Linux? Например, когда я SSH к серверу, он запрашивает мой пароль, где введенные ключи не отображаются:

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

Есть ли способ удалить весь мой введенный текст, не нажимая клавишу Backspace в течение неизвестного периода времени? Когда я думаю, что ввел что-то неправильно, я хочу начать все сначала, и нажатие клавиши backspace на несколько секунд раздражает. Я пытался Esc, CtrlAнадеюсь, выделить весь текст и Home. CtrlCотменяет всю команду, и я должен отправить команду снова, чтобы повторить попытку. Это почти лучшее и быстрое решение, но все же не удовлетворяет. Вставка тоже не работает в моей оболочке.

bugybunny
источник
7
Что касается Ctrl + A, в терминале это обычно означает «перейти к началу строки». Набор ключей, используемых в терминале (особенно bash), часто ближе к Emacs, чем к Windows.
Score_Under
18
Sshing как root обычно считается очень плохой практикой.
Сэм
Чтобы удалить символы с экрана, вам нужно будет использовать последовательности управления курсором (если ваш терминал их поддерживает). Запустив sshиз скрипта, вы можете проанализировать строку параметров, прежде чем запускать ее.
AFH
4
Пожалуйста, обратите внимание на то, что сказал @Sam. Вы должны отключить root-логины везде. Войдите в систему как обычный пользователь со сложным паролем, а затем suстаньте пользователем root. Следующим шагом является отключение схем аутентификации на основе пароля в SSH и использование ключей для входа в систему.
kostix
@kostix Я уверен, что отключение паролей должно быть первым шагом. Если вы используете пароли, то с su и отключенным root, достаточно просто ввести пароль, который злоумышленник уже угадал во второй раз после входа в систему, так что вы получите что-то, только если имя пользователя трудно угадать (чего часто нет Т, я полагаю, не имея статистики). И без входа в систему пароль добавляет второй секрет, пароль, но это стоит меньше, чем закрытый ключ, который является более длинным секретом.
Никому

Ответы:

163

Вы можете удалить весь введенный пароль с помощью Ctrl+ U.

Ипор Сирсер
источник
6
Это также работает в обычном терминале!
MoonRunestar
35
Для справки: это связывание ключей по умолчанию в readmaz для «режима emacs» unix-line-discard, описываемое как «Убить назад от курсора до начала текущей строки». Ссылка: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline - это библиотека ввода, используемая большинством оболочек и многими другими интерактивными программами (но она не встроена в tty, поэтому она не будет работать везде ).
IMSoP
22
@IMSoP Однако сам по себе Ctrl-U будет встроен в TTY (как символ по умолчанию для stty killфункции), поэтому она работает с SSH паролем.
Random832
5
Кстати, Ctrl + K является эквивалентом удаления от курсора до конца строки.
wjandrea
2
@DennisJaheruddin: это невозможно, ssh не использует readline для редактирования строк. Смотри мой ответ.
Питер Кордес
14

В отличие от этого bash, sshприглашение пароля не использует никакой специальной библиотеки терминального ввода, как 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 может удалять только символы в конце строки, поэтому нет ^aи / deleteили стрелка влево / вправо)

Когда bashкоманда запускается на переднем плане, она сначала переводит TTY в канонический режим (потому что это значение по умолчанию). Таким образом, работающий stty -a(без перенаправления) всегда будет видеть свой собственный терминал в каноническом режиме. Но если вы перенаправите ввод с другого TTY, на котором он bashзапущен, вы увидите, какие настройки терминала применены bash + readline. например, stty -a < /dev/pts/12показывает -icanonдля режима raw, потому что у меня 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

Питер Кордес
источник
Вы можете просто набрать 'stty', чтобы увидеть все текущие настройки. Использование 'stty row ##' или 'stty cols ##' позволит вам на лету изменить количество строк или столбцов, доступных для окна терминала. Что особенно удобно, когда вы работаете в окне в окне через что-то вроде VNC, которое не обязательно определяет, насколько велико ваше внешнее окно. Вы можете определить свою активную область меньше, чем окно, в котором она находится, и тогда вам не нужно будет прокручивать ее. Разрешение VI и другим вещам все еще работать должным образом. Он также может переназначить Backspace и удалить на лету.
Роуэн Хокинс
@RowanHawkins: мой последний абзац был плохо отредактирован. Исправлено сейчас. Я пытался подчеркнуть, что, перенаправляя с другого tty, вы можете увидеть sttyнастройки / ioctl, которые сама bash + readline применила в режиме raw. (И тот факт, что он вообще в необработанном режиме, где большинство специальных символов не применяются)
Питер Кордес