Excluir senha digitada no prompt de senha oculta (Linux) com atalho

106

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.

bugybunny
fonte
7
Em relação a Ctrl + A, no terminal isso geralmente significa "ir para o início da linha". O conjunto de chaves usado no terminal (especialmente o bash) geralmente está mais próximo do Emacs do que do Windows.
Score_Under
18
Sshing como root é geralmente considerado uma prática muito, muito ruim.
Sam
Para excluir caracteres da tela, você precisará usar as seqüências de controle do cursor (se o seu terminal os suportar). Ao executar a sshpartir de um script, você pode analisar a sequência de parâmetros antes de executá-la.
AFH
4
Por favor, preste atenção no que o @Sam disse. Você deve desativar os logins raiz em todos os lugares. Entre como um usuário comum com uma senha complicada e depois suse torne root. A próxima etapa é desativar os esquemas de autenticação baseada em senha no SSH e usar as chaves para o login.
Kostix
@kostix Tenho certeza de que desabilitar senhas deve ser o primeiro passo. Se você estiver usando senhas, com su e root desabilitado, é apenas uma questão de digitar a senha que o invasor já adivinhou uma segunda vez após o login, para ganhar apenas algo se o nome do usuário for difícil de adivinhar (o que geralmente não é suponho sem ter estatísticas). E sem o login com senha, ele adiciona um segundo segredo, a senha, mas vale menos que a chave privada, que é um segredo mais longo.
Ninguém

Respostas:

163

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

Ipor Sircer
fonte
6
Isso também funciona no prompt do terminal regular também!
MoonRunestar
35
Para referência, esta é a ligação de tecla padrão no "modo emacs" do readline para 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 ).
IMSoP
22
@IMSoP No entanto, o Ctrl-U em si é incorporado ao tty (como o caractere padrão da stty killfunção), e é por isso que funciona com o prompt de senha ssh.
usar o seguinte comando
5
Entre, Ctrl + K é o equivalente para excluir do cursor até o final da linha.
Wjandrea
2
@DennisJaheruddin: Isso não é possível, o ssh não usa o readline para fornecer edição de linha. Veja minha resposta.
Peter Cordes
14

Ao contrário bash, ssho prompt de senha do não usa nenhuma biblioteca especial de entrada de terminal como readline. 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 isso
kill = ^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 catou cat > /dev/nullno seu terminal . Digite coisas e veja o que funciona e o que não funciona para editá-lo.


readline(usado por bash) 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á ^ae delete/ ou seta para a esquerda / direita)

Quando bashexecuta um comando em primeiro plano, ele coloca o TTY no modo canônico primeiro (porque esse é o padrão). Portanto, a execução stty -a(sem redirecionamento) sempre verá seu próprio terminal no modo canônico. Mas se você redirecionar a entrada de algum outro TTY bashem execução, poderá ver quais configurações do terminal bash + readline foram aplicadas. por exemplo, stty -a < /dev/pts/12mostra -icanonpara o modo bruto, porque eu tenho uma bashcorrida nesse terminal. (Troquei para outra guia e corri tty, depois usei o caminho do arquivo do dispositivo no primeiro terminal). Se eu corresse catnaquele outro terminal, veria o icanonmodo 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

Peter Cordes
fonte
Você pode simplesmente digitar 'stty' para ver todas as configurações atuais. O uso de 'stty lines ##' ou 'stty cols ##' permitirá alterar on the Fly quantas linhas ou colunas a janela do terminal tem disponível para ele. O que é especialmente útil quando você está trabalhando em uma janela em uma janela através de algo como o VNC, que não necessariamente captura o tamanho da janela externa. Basicamente, você pode definir sua área ativa como menor que a janela em que está e não precisar rolar a tela. Permitir que VI e outras coisas ainda funcionem corretamente. Também pode remapear o backspace e excluir em tempo real.
Rowan Hawkins
@RowanHawkins: meu último parágrafo foi mal editado. Corrigido agora. Eu estava tentando afirmar que, ao redirecionar de outro tty, você pode ver as sttyconfiguraçõ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)
Peter Cordes