Czy istnieje sposób na usunięcie wszystkich znaków, które wprowadziłem w ukrytym pytaniu o hasło w systemie Linux? Na przykład, gdy przesyłam SSH do serwera, prosi o podanie hasła, w którym nie są wyświetlane wprowadzone klucze:
$ ssh root@somehost
root@somehost's password:
Czy istnieje sposób na usunięcie całego wprowadzonego tekstu bez konieczności naciskania klawisza Backspace przez nieznany czas? Kiedy wydaje mi się, że popełniłem błąd, chcę zacząć od nowa, a naciskanie klawisza Backspace na kilka sekund jest denerwujące. Próbowałem Esc, CtrlAmam nadzieję, zaznaczyć cały tekst i Home. CtrlCanuluje całe polecenie i muszę ponownie wysłać polecenie, aby spróbować ponownie. To prawie najlepsze i najszybsze rozwiązanie, ale wciąż niezadowalające. Wstaw też nie działa w mojej powłoce.
linux
keyboard-shortcuts
terminal
passwords
bugybunny
źródło
źródło
ssh
ze skryptu, możesz przeanalizować ciąg parametrów przed jego uruchomieniem.su
root. Następnym krokiem jest wyłączenie schematów uwierzytelniania opartych na hasłach w SSH i użycie kluczy do logowania.Odpowiedzi:
Możesz usunąć całe wpisane hasło za pomocą Ctrl+ U.
źródło
unix-line-discard
, opisanym jako „Zabij wstecz od kursora do początku bieżącej linii”. Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 readline GNU to biblioteka wejściowa używana przez większość powłok i wiele innych programów interaktywnych (ale nie jest wbudowana w tty, więc to nie będzie praca wszędzie ).stty kill
funkcji), dlatego działa z pytaniem o hasło ssh.W przeciwieństwie
bash
,ssh
jest prośba o podanie hasła nie korzysta z żadnego specjalnego terminala wejściowego biblioteki podobnegoreadline
. Funkcje edycji linii to tylko podstawowe funkcje edycji linii POSIX TTY.Masz więc POSIX TTY w trybie „gotowanym” (nie surowym), znanym również jako tryb kanoniczny, a jedyną dostępną edycją linii jest to, co zapewnia jądro. Zobacz
stty(1)
i zauważ tokill = ^U
. Tutaj również definiowany jest znak backspace (erase = ^?
). Usuwanie słów (^W
) jest wygodne, gdy nie piszesz w ciemno.lnext = ^V
oznacza, że możesz wpisać control-v, a następnie cokolwiek (w tym control-c), aby uzyskać literalną kontrolę-c.Aby debugować to, co próbujesz zrobić na ślepo, uruchom
cat
lubcat > /dev/null
w swoim terminalu . Wpisz rzeczy, a następnie sprawdź, co działa, a co nie, aby je edytować.readline
(używane przezbash
) odczytuje surowy znak i wykonuje edycję linii w przestrzeni użytkownika. Jego domyślne powiązania są jednak zgodne z domyślnymi znakami kontrolnymi TTY dla podzbioru funkcji edycyjnych, które oba zapewniają.readline wykracza poza zwykłą edycję linii zwykłego TTY. (np TTY może jedynie usunąć znaki na końcu linii, więc nie ma
^a
idelete
czy strzałka w lewo / w prawo)Gdy
bash
uruchamia polecenie w planie, to stawia w trybie TTY kanonicznej pierwszy (ponieważ jest to ustawienie domyślne). Tak więc uruchomionastty -a
(bez przekierowania) zawsze zobaczy swój własny terminal w trybie kanonicznym. Ale jeśli przekierujesz dane wejściowe z innegobash
działającego na nim TTY , możesz zobaczyć, jakie ustawienia terminalu zastosował bash + readline. np.stty -a < /dev/pts/12
pokazuje-icanon
tryb surowy, ponieważ mambash
uruchomiony na tym terminalu. (Przełączyłem się na inną kartę i uruchomiłemtty
, a następnie użyłem ścieżki pliku urządzenia z pierwszego terminala). Gdybym biegłcat
w tym drugim terminalu, sprawdziłbymicanon
tryb kanoniczny.Powiązane: TTY odszyfrowany
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface
źródło
stty
/ ioctl, które bash + readline zastosowało w trybie raw. (I fakt, że w ogóle jest w trybie surowym, gdzie większość znaków specjalnych nie ma zastosowania)