Existe uma maneira de excluir todos os caracteres digitados em um prompt de senha oculta no Linux? Por exemplo, quando eu SSH para um servidor, ele solicita minha senha onde as chaves inseridas não são mostradas:
$ ssh root@somehost
root@somehost's password:
Existe uma maneira de excluir todo o texto digitado sem precisar pressionar backspace por um período desconhecido? Quando acho que inseri algo errado, quero começar de novo e pressionar o backspace por alguns segundos é irritante. Eu tentei Esc, CtrlAespero selecionar o texto inteiro e Home. CtrlCcancela o comando inteiro e eu tenho que enviar o comando novamente para tentar novamente. Esta é quase a melhor e mais rápida solução, mas ainda não é satisfatória. O Insert também não funciona no meu shell.
linux
keyboard-shortcuts
terminal
passwords
bugybunny
fonte
fonte
ssh
partir de um script, você pode analisar a sequência de parâmetros antes de executá-la.su
se torne root. A próxima etapa é desativar os esquemas de autenticação baseada em senha no SSH e usar as chaves para o login.Respostas:
Você pode excluir toda a senha digitada com Ctrl+ U.
fonte
unix-line-discard
, descrito como "Recuar do cursor até o início da linha atual". Ref: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 A linha de leitura GNU é a biblioteca de entrada usada pela maioria dos shells e muitos outros programas interativos (mas não está embutida no tty, portanto, isso não será trabalhar em qualquer lugar ).stty kill
função), e é por isso que funciona com o prompt de senha ssh.Ao contrário
bash
,ssh
o prompt de senha do não usa nenhuma biblioteca especial de entrada de terminal comoreadline
. Os recursos de edição de linha são apenas os recursos básicos de edição de linha POSIX TTY.Portanto, você tem um POSIX TTY no modo "cozido" (não cru), também conhecido como modo canônico, e a única edição de linha disponível é a fornecida pelo kernel. Veja
stty(1)
e observe issokill = ^U
. É também aqui que o caractere backspace é definido (erase = ^?
). O apagamento de palavras (^W
) é conveniente quando você não está digitando às cegas.lnext = ^V
significa que você pode digitar control-v e qualquer coisa (incluindo control-c) para obter um literal control-c.Para depurar o que você estava tentando fazer às cegas, execute
cat
oucat > /dev/null
no seu terminal . Digite coisas e veja o que funciona e o que não funciona para editá-lo.readline
(usado porbash
) lê caracteres brutos e faz a edição de linha no espaço do usuário. Suas ligações padrão são compatíveis com os caracteres de controle TTY padrão, no entanto, para o subconjunto de recursos de edição que ambos fornecem.O readline vai muito além da simples edição de linhas de um TTY simples. (por exemplo, um TTY só pode excluir caracteres no final da linha, portanto não há
^a
edelete
/ ou seta para a esquerda / direita)Quando
bash
executa um comando em primeiro plano, ele coloca o TTY no modo canônico primeiro (porque esse é o padrão). Portanto, a execuçãostty -a
(sem redirecionamento) sempre verá seu próprio terminal no modo canônico. Mas se você redirecionar a entrada de algum outro TTYbash
em execução, poderá ver quais configurações do terminal bash + readline foram aplicadas. por exemplo,stty -a < /dev/pts/12
mostra-icanon
para o modo bruto, porque eu tenho umabash
corrida nesse terminal. (Troquei para outra guia e corritty
, depois usei o caminho do arquivo do dispositivo no primeiro terminal). Se eu corressecat
naquele outro terminal, veria oicanon
modo canônico.Relacionados: O TTY desmistificado
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html
https://en.wikipedia.org/wiki/POSIX_terminal_interface
fonte
stty
configurações / ioctl que o bash + readline em si aplicou no modo bruto. (E o fato de que ele está em modo bruto em tudo, onde a maioria dos caracteres especiais não se aplicam)