104 votes

Supprimer le mot de passe saisi dans la boîte de dialogue du mot de passe caché (Linux) avec un raccourci

Y a-t-il un moyen de supprimer tous les caractères que j'ai entrés dans une invite de mot de passe cachée dans Linux? Par exemple, lorsque je me connecte en SSH à un serveur, il me demande mon mot de passe où les touches entrées ne sont pas affichées:

$ ssh root@somehost
root@somehost's password:

Y a-t-il un moyen de supprimer tout le texte que j'ai entré sans avoir à appuyer sur la touche de retour arrière pendant un temps inconnu? Lorsque je pense avoir entré quelque chose de faux, je veux recommencer et appuyer sur la touche de retour arrière pendant quelques secondes est ennuyeux. J'ai essayé Esc, CtrlA pour sélectionner tout le texte et Home. CtrlC annule toute la commande et je dois renvoyer la commande pour réessayer. C'est presque la meilleure et la plus rapide solution mais elle n'est toujours pas satisfaisante. Insérer ne fonctionne pas non plus dans mon shell.

7 votes

En ce qui concerne Ctrl+A, dans le terminal cela signifie généralement "aller au début de la ligne". L'ensemble de touches utilisé dans le terminal (surtout bash) est souvent plus proche d'Emacs que de Windows.

18 votes

Sshing en tant que root est généralement considéré comme une pratique très très mauvaise.

0 votes

Pour supprimer des caractères de l'écran, vous devrez utiliser des séquences de contrôle du curseur (si votre terminal les prend en charge). En exécutant ssh à partir d'un script, vous pouvez analyser la chaîne de paramètres avant de l'exécuter.

161voto

Ipor Sircer Points 3909

Vous pouvez supprimer le mot de passe saisi entier en utilisant Ctrl+U.

6 votes

Cela fonctionne également dans l'invite de terminal régulière !

35 votes

Pour référence, voici la combinaison de touches par défaut dans le "mode emacs" de readline pour unix-line-discard, décrite comme "Suppression vers l'arrière du curseur jusqu'au début de la ligne actuelle." Réf : cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline est la bibliothèque d'entrée utilisée par la plupart des shells et de nombreux autres programmes interactifs (mais n'est pas intégrée au terminal, donc cela ne fonctionnera pas partout).

22 votes

@IMSoP Cependant, Ctrl-U en soi est intégré à la tty (comme caractère par défaut pour la fonction stty kill), c'est pourquoi cela fonctionne avec le prompt de mot de passe ssh.

14voto

Peter Cordes Points 5022

Contrairement à bash, la demande de mot de passe de ssh n'utilise aucune bibliothèque spéciale d'entrée terminal comme readline. Les fonctionnalités d'édition de ligne sont simplement les fonctionnalités d'édition de ligne POSIX de base.

Vous avez donc un TTY POSIX en mode "cuit" (pas brut), aka mode canonique, et la seule édition de ligne disponible est celle fournie par le noyau. Voir stty(1), et remarquez que
kill = ^U. C'est également là que le caractère de retour arrière est défini (erase = ^?). L'effacement de mot (^W) est pratique lorsque vous ne tapez pas à l'aveuglette.

lnext = ^V signifie que vous pouvez taper contrôle-v puis n'importe quoi (y compris contrôle-c) pour obtenir un contrôle-c littéral.

Pour déboguer ce que vous essayiez de faire à l'aveuglette, exécutez cat ou cat > /dev/null dans votre terminal. Tapez des choses, puis voyez ce qui fonctionne et ce qui ne fonctionne pas pour le modifier.


readline (utilisé par bash) lit des caractères bruts et effectue l'édition de ligne dans l'espace utilisateur. Ses liaisons par défaut sont compatibles avec les caractères de contrôle TTY par défaut, cependant, pour le sous-ensemble des fonctionnalités d'édition qu'ils fournissent tous les deux.

Readline va bien au-delà de la simple édition de ligne d'un TTY basique. (par ex. un TTY ne peut supprimer que des caractères à la fin de la ligne, donc il n'y a pas de ^a et delete ou flèche gauche/droite)

Quand bash exécute une commande en premier plan, il met d'abord le TTY en mode canonique (car c'est la valeur par défaut). Donc, exécuter stty -a (sans redirection) verra toujours son propre terminal en mode canonique. Mais si vous redirigez l'entrée depuis un autre TTY où bash est en cours d'exécution, vous pouvez voir les paramètres terminaux que bash + readline a appliqués. par ex. stty -a < /dev/pts/12 montre -icanon pour le mode brut car j'ai un bash en cours d'exécution sur ce terminal. (J'ai changé d'onglet et exécuté tty, puis utilisé ce chemin de fichier de périphérique à partir du premier terminal). Si j'exécutais cat dans cet autre terminal, je verrais icanon pour le mode canonique.

Lié : La démystification du TTY

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

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

0 votes

Vous pouvez en fait simplement taper "stty" pour voir tous les paramètres actuels. Utiliser "stty rows ##" ou "stty cols ##" vous permettra de changer facilement le nombre de lignes ou de colonnes disponibles dans la fenêtre terminal. Ce qui est particulièrement pratique lorsque vous travaillez dans une fenêtre à travers quelque chose comme VNC qui ne capture pas nécessairement correctement la taille de votre fenêtre extérieure. Vous pouvez essentiellement définir votre zone active pour être plus petite que la fenêtre dans laquelle elle se trouve et ne pas avoir à faire défiler. Cela permet à VI et à d'autres éléments de continuer à fonctionner correctement. Vous pouvez également remapper les touches de retour arrière et de suppression facilement.

0 votes

@RowanHawkins: mon dernier paragraphe était mal édité. C'est réparé maintenant. Je voulais souligner que en redirigeant à partir d'une autre tty, vous pouvez voir les réglages stty / ioctl que bash+readline lui-même a appliqués en mode brut. (Et le fait qu'il est en mode brut tout court, où la plupart des caractères spéciaux ne s'appliquent pas)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X