Есть ли способ удалить все символы, которые я ввел в запросе скрытого пароля в Linux? Например, когда я SSH к серверу, он запрашивает мой пароль, где введенные ключи не отображаются:
$ ssh root@somehost
root@somehost's password:
Есть ли способ удалить весь мой введенный текст, не нажимая клавишу Backspace в течение неизвестного периода времени? Когда я думаю, что ввел что-то неправильно, я хочу начать все сначала, и нажатие клавиши backspace на несколько секунд раздражает. Я пытался Esc, CtrlAнадеюсь, выделить весь текст и Home. CtrlCотменяет всю команду, и я должен отправить команду снова, чтобы повторить попытку. Это почти лучшее и быстрое решение, но все же не удовлетворяет. Вставка тоже не работает в моей оболочке.
linux
keyboard-shortcuts
terminal
passwords
bugybunny
источник
источник
ssh
из скрипта, вы можете проанализировать строку параметров, прежде чем запускать ее.su
станьте пользователем root. Следующим шагом является отключение схем аутентификации на основе пароля в SSH и использование ключей для входа в систему.Ответы:
Вы можете удалить весь введенный пароль с помощью Ctrl+ U.
источник
unix-line-discard
, описываемое как «Убить назад от курсора до начала текущей строки». Ссылка: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline - это библиотека ввода, используемая большинством оболочек и многими другими интерактивными программами (но она не встроена в tty, поэтому она не будет работать везде ).stty kill
функции), поэтому она работает с SSH паролем.В отличие от этого
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
настройки / ioctl, которые сама bash + readline применила в режиме raw. (И тот факт, что он вообще в необработанном режиме, где большинство специальных символов не применяются)