web-dev-qa-db-fra.com

Supprimer le mot de passe entré dans le mot de passe caché Invite (Linux) avec raccourci

Est-il possible de supprimer tous les caractères que j'ai entrés dans une invite de mot de passe masqué sous Linux? Par exemple, lorsque je SSH sur un serveur, il me demande mon mot de passe lorsque les clés saisies ne sont pas affichées:

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

Existe-t-il un moyen de supprimer tout le texte saisi sans avoir à appuyer sur la touche Retour arrière pendant une durée indéterminée? Quand je pense avoir entré quelque chose de mal, je veux recommencer et appuyer sur la touche arrière pendant quelques secondes est agaçant. j'ai essayé EscCtrlA pour pouvoir espérer sélectionner tout le texte et HomeCtrlC annule toute la commande et je dois renvoyer la commande pour réessayer. C’est presque la solution la meilleure et la plus rapide, mais elle n’est toujours pas satisfaisante. L'insertion ne fonctionne pas non plus dans mon shell.

106
bugybunny

Vous pouvez supprimer le mot de passe entier avec Ctrl+U.

163
Ipor Sircer

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

Vous avez donc un TTY POSIX en mode "cuit" (non brut), aussi appelé mode canonique, et la seule modification de ligne disponible est celle fournie par le noyau. Voir stty(1) , et notez que
kill = ^U. C'est également à cet endroit que le caractère de retour arrière est défini (erase = ^?). Word-erase (^W) est pratique lorsque vous ne tapez pas à l'aveugle.

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

Pour déboguer en aveugle ce que vous tentiez de faire, exécutez cat ou cat > /dev/null dans votre terminal . Tapez des choses, puis voyez ce qui fonctionne et ce qui ne le modifie pas.


readline (utilisé par bash) lit le caractère brut et effectue la modification de ligne dans l'espace utilisateur. Ses liaisons par défaut sont compatibles avec les caractères de contrôle TTY par défaut pour le sous-ensemble de fonctions d’édition qu’elles fournissent toutes les deux.

readline va bien au-delà de la simple édition de ligne d’un ATS simple. (Par exemple, un téléscripteur ne peut supprimer que des caractères à la fin de la ligne, il n'y a donc pas de ^a et de delete ni de flèche gauche/droite)

Lorsque bash exécute une commande au premier plan, il met d'abord le téléscripteur 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 d'un autre TTY sur lequel bash est exécuté, vous pouvez voir quels paramètres de terminal bash + readline ont été appliqués. par exemple. stty -a < /dev/pts/12 affiche -icanon pour le mode brut, car j’ai une variable bash exécutée sur ce terminal. (Je suis passé à un autre onglet et ai exécuté tty, puis ai utilisé ce chemin de fichier de périphérique depuis le premier terminal). Si j’exécutais cat dans cet autre terminal, je verrais icanon pour le mode canonique.

Connexes: Le téléscripteur démystifié

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

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

14
Peter Cordes