Questão Excluir senha inserida em prompt de senha oculta (Linux) com atalho


Existe uma maneira de excluir todos os caracteres que eu digitei em um prompt de senha oculta 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 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, CtrlUMA esperançosamente selecione todo o texto e Casa. CtrlC cancela todo o comando e 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. Inserir não funciona no meu shell também.


105


origem


Em relação ao Ctrl + A, no terminal isso geralmente significa "ir para o início da linha". O conjunto de chaves usadas no terminal (especialmente bash) é frequentemente mais próximo do Emacs do que do Windows. - Score_Under
Sshing como root é geralmente considerado uma prática muito muito ruim. - Sam
Para excluir caracteres da tela, você precisará usar seqüências de controle do cursor (se o seu terminal as suportar). Correndo ssh a partir de um script, você pode analisar a cadeia de parâmetros antes de executá-la. - AFH
Por favor, preste atenção ao que @Sam disse. Você deve desativar logins de raiz em todos os lugares. Faça login como usuário comum com uma senha complicada e, em seguida, su para se tornar raiz. O próximo passo é desabilitar os esquemas de autenticação baseados em senha no SSH e usar chaves para login. - kostix
@kostix Tenho certeza que desabilitar as senhas deve ser o primeiro passo. Se você está usando senhas, então com su e disabled root, é apenas uma questão de digitar a senha que o atacante já adivinhou uma segunda vez após o login, então você só ganha algo se o nome do usuário for difícil de adivinhar Eu assumo sem ter estatísticas). E sem o login de senha, ele adiciona um segundo segredo, a senha, mas vale menos que a chave privada, que é um segredo mais longo. - Nobody


Respostas:


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


162



Isso também funciona no prompt do terminal regular também! - MoonRunestar
Para referência, esta é a ligação de chave padrão no "modo emacs" da readline para unix-line-discard, descrito como "Kill backward do cursor para 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 embutido no tty, então isso não vai funcionar em toda parte). - IMSoP
@IMSoP No entanto, a própria Ctrl-U é construído no tty (como o caractere padrão para o stty kill função), é por isso que funciona com o prompt de senha ssh. - Random832
BTW, Ctrl + K é o equivalente para excluir do cursor para o fim da linha. - wjandrea
@DennisJaheruddin: Isso não é possível, o ssh não usa readline para fornecer edição de linha. Veja minha resposta. - Peter Cordes


Ao contrário bash, sshO prompt de senha 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 do POSIX TTY.

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. Vejo stty(1)e observe que
kill = ^U. Este é também o local onde o caractere de retrocesso é definido (erase = ^?). Apagar palavras (^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 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 em primeiro plano, coloca o TTY no modo canônico primeiro (porque esse é o padrão). Então correndo 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 rodando nele, você pode ver quais configurações de terminal bash + readline aplicadas. por exemplo. stty -a < /dev/pts/12 mostra -icanon para o modo raw porque eu tenho um bash correndo naquele terminal. (Eu mudei para outra guia e corri tty, em seguida, usou esse caminho de arquivo do dispositivo do primeiro terminal). Se eu corri cat naquele outro terminal, eu veria icanon para o modo canônico.

Relacionado: O TTY desmistificado

https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html

https://en.wikipedia.org/wiki/POSIX_terminal_interface


13



Você pode realmente digitar 'stty' para ver todas as configurações atuais. Usar 'stty rows ##' ou 'stty cols ##' permitirá que você altere quantas colunas ou linhas a janela do terminal tiver disponível. 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 sua janela externa. Você basicamente pode definir sua área ativa para ser menor do que a janela e não tem que rolar ao redor. Permitir que o VI e outras coisas ainda funcionem corretamente. Ele também pode remapear backspace e excluir na mosca. - Rowan Hawkins
@RowanHawkins: meu último parágrafo foi mal editado. Corrigido agora. Eu estava tentando fazer o ponto que redirecionando de outro tty, você pode ver o stty / ioctl settings que o bash + readline se aplicou no modo raw. (E o fato de estar no modo raw, onde a maioria dos caracteres especiais não se aplica) - Peter Cordes