Excluir senha inserida em prompt de senha oculto (Linux) com atalho

105

Existe uma maneira de excluir todos os caracteres que digitei em um prompt de senha oculto no Linux? Por exemplo, quando eu SSH para um servidor, ele pede 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 meu texto digitado sem ter que pressionar o backspace por um período de tempo desconhecido? Quando penso que introduzi algo errado, quero começar de novo e pressionar o retrocesso por alguns segundos é irritante. Eu tentei Esc , Ctrl A para selecionar o texto completo e Início . Ctrl C cancela todo o comando 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. Insert não funciona no meu shell.

    
por bugybunny 01.11.2017 / 15:05

2 respostas

163

Você pode apagar toda a senha digitada com Ctrl + U .

    
por 01.11.2017 / 15:07
14

Diferentemente do prompt de senha bash , ssh não usa nenhuma biblioteca especial de entrada de terminal como readline . Os recursos de edição de linha são apenas a linha de base POSIX TTY recursos de edição.

Então 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 é o que é fornecido pelo kernel. Consulte stty(1) e observe que o kill = ^U Também é onde o caractere de retrocesso é definido ( erase = ^? ). Word-erase ( ^W ) é conveniente quando você não está digitando cego.

lnext = ^V significa que você pode digitar control-v e depois qualquer coisa (incluindo control-c) para obter um controle literal-c.

Para depurar o que você estava tentando fazer cegamente, execute cat ou cat > /dev/null no seu terminal . Digite coisas e veja o que funciona e o que não é para editá-lo.

readline (usado por bash ) lê caractere bruto 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.

readline vai muito além da simples linha de edição de um TTY simples. (por exemplo, um TTY só pode excluir caracteres no final da linha, por isso não há ^a e delete ou seta para a esquerda / direita)

Quando bash executa um comando no primeiro plano, ele coloca o TTY no modo canônico primeiro (porque esse é o padrão). Portanto, executar stty -a (sem redirecionamento) sempre verá seu próprio terminal no modo canônico. Mas se você redirecionar a entrada de algum outro TTY que tenha bash em execução, você poderá ver quais configurações do terminal bash + readline foram aplicadas. por exemplo. stty -a < /dev/pts/12 mostra -icanon para o modo raw porque eu tenho um bash em execução nesse terminal. (Mudei para outra guia e executei tty , depois usei o caminho do arquivo de dispositivo do primeiro terminal). Se eu executasse cat nesse outro terminal, veria icanon para o modo canônico.

Relacionados: O TTY desmistificado

link

link

    
por 02.11.2017 / 15:05