Видаліть введений пароль у прихованому запиті пароля (Linux) за допомогою ярлика


106

Чи є спосіб видалити всі символи, які я ввів у прихованому запиті пароля в Linux? Наприклад, коли я SSH на сервер, він запитує мій пароль, де введені ключі не показані:

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

Чи є спосіб видалити весь введений текст без необхідності натискання зворотної області протягом невідомої кількості часу? Коли я думаю, що я вступив щось не так, мені хочеться почати спочатку і натиснути на пробіл на кілька секунд, це дратує. Я намагався Esc, CtrlAсподіваюсь, відібрати весь текст і Home. CtrlCскасовує всю команду, і мені доведеться знову надіслати команду, щоб повторити спробу. Це майже найкраще і найшвидше рішення, але все ще не задовольняє. Вставка також не працює в моїй оболонці.


7
Що стосується Ctrl + A, то в терміналі це зазвичай означає "перейти до початку рядка". Набір клавіш, що використовуються в терміналі (особливо bash), часто ближче до Emacs, ніж до Windows.
Score_Under

18
Сшинг як корінь, як правило, вважається дуже поганою практикою.
Сем

Щоб видалити символи з екрана, вам потрібно буде використовувати послідовності управління курсором (якщо ваш термінал їх підтримує). Запустивши sshсценарій, ви можете проаналізувати рядок параметрів перед його запуском.
AFH

4
Зверніть увагу на те, що сказав @Sam. Вам слід вимкнути кореневі логіни скрізь. Увійдіть як звичайний користувач зі складним паролем, а потім suстав root. Наступним кроком є ​​відключення схем аутентифікації на основі пароля в SSH та використання ключів для входу.
kostix

@kostix Я впевнений, що першим кроком має бути відключення паролів. Якщо ви користуєтеся паролями, то з su та відключеним корінцем, це лише питання введення пароля, про який зловмисник уже вгадав другий раз після входу, тому ви отримуєте щось лише тоді, якщо ім’я користувача важко здогадатися (що це часто не так я вважаю, не маючи статистики). І без входу до пароля він додає другий секрет, пароль, але це коштує менше, ніж приватний ключ, який є довшим секретом.
Ніхто

Відповіді:


163

Ви можете видалити весь набраний пароль за допомогою Ctrl+ U.


6
Це також працює у звичайному підказці терміналу!
MoonRunestar

35
Для довідки, це прив'язка клавіш за замовчуванням у режимі "emacs" для readline для unix-line-discard, описаного як "Вбити назад від курсору до початку поточного рядка". Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 Читання GNU GNU - це вхідна бібліотека, яка використовується більшістю оболонок та багатьма іншими інтерактивними програмами (але вона не вбудована в tty, тому це не буде працювати скрізь ).
IMSoP

22
@IMSoP Однак сам по собі Ctrl-U буде вбудований в TTY (як символ за замовчуванням для stty killфункції), тому вона працює з SSH паролем.
Випадково832

5
BTW, Ctrl + K - еквівалент для видалення з курсору до кінця рядка.
wjandrea

2
@DennisJaheruddin: Це неможливо, ssh не використовує readline для редагування рядків. Дивіться мою відповідь.
Пітер Кордес

14

На відміну від bash, sshу запиті пароля не використовується жодна спеціальна бібліотека терміналів-входів, як readline. Особливості редагування рядків - це лише основні функції редагування ліній POSIX TTY.

Отже, у вас є POSIX TTY в режимі "приготування" (не сировинному), так само канонічному режимі, і єдине доступне редагування рядків - це те, що надається ядром. Дивіться stty(1), і помічайте це
kill = ^U. Тут також визначено символ зворотної області ( erase = ^?). Word-стирання ( ^W) зручно, коли ви не набираєте сліпого.

lnext = ^V означає, що ви можете набрати control-v, тоді все, що завгодно (включаючи control-c), щоб отримати буквальний контроль-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для необробленого режиму, тому що я 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 рядків ##' або 'stty cols ##' дозволить вам змінити на Fly скільки рядків або стовпців, яким доступне вікно терміналу. Що особливо зручно, коли ви працюєте у вікні у вікні через щось на кшталт VNC, що не обов'язково дозволяє зрозуміти, наскільки правильно ваше зовнішнє вікно. Ви можете в основному визначити, що ваша активна область буде меншою за вікно, в якому вона знаходиться, і потім не доведеться прокручуватися. Дозволяючи VI та іншим речам все ще працювати належним чином. Він також може перевпорядкувати назад і видалити на Fly.
Rowan Hawkins

@RowanHawkins: мій останній абзац був погано відредагований. Виправлено зараз. Я намагався домогтися того, що перенаправляючись з іншого tty, ви можете побачити параметри stty/ ioctl, які bash + readline застосував у сирому режимі. (І той факт, що він взагалі знаходиться в сирому режимі, де більшість спеціальних символів не застосовується)
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.