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é Esc, CtrlAespérons de sélectionner tout le texte et Home. CtrlCannule 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. Insert ne fonctionne pas dans mon shell non plus.
la source
ssh
partir d'un script, vous pouvez analyser la chaîne de paramètres avant de l'exécuter.su
devenez root. L'étape suivante consiste à désactiver les schémas d'authentification basés sur mot de passe dans SSH et à utiliser des clés pour la connexion.Réponses:
Vous pouvez supprimer le mot de passe entier saisi avec Ctrl+ U.
la source
unix-line-discard
, décrite comme "Tue en arrière depuis le curseur jusqu'au début de la ligne en cours". Ref: 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 elle n’est pas intégrée au tty, elle ne travailler partout ).stty kill
fonction), raison pour laquelle il fonctionne avec l'invite de mot de passe ssh.Contrairement à
bash
,ssh
l'invite de mot de passe n'utilise pas de bibliothèque spéciale d'entrée de terminal commereadline
. Les fonctions de modification de ligne ne sont que les caractéristiques de base de modification de ligne POSIX TTY.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. Vous voyez
stty(1)
et remarquez çakill = ^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 controlal-c littéral.Pour déboguer ce que vous essayiez de faire à l'aveuglette, exécutez
cat
oucat > /dev/null
dans votre terminal . Tapez des choses, puis voyez ce qui fonctionne et ce qui ne le modifie pas.readline
(utilisé parbash
) 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 flèche
^a
etdelete
/ ou flèche gauche / droite)Lorsqu'il
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, courirstty -a
(sans redirection) verra toujours son propre terminal en mode canonique. Mais si vous redirigez les entrées d'un autre TTY sur lequel ilbash
tourne, vous pouvez voir quels paramètres du terminal bash + readline ont été appliqués. par exemplestty -a < /dev/pts/12
montre-icanon
pour le mode brut parce que j'ai un enbash
cours d'exécution sur ce terminal. (Je suis passé à un autre onglet et ai courutty
, puis utilisé ce chemin de fichier de périphérique à partir du premier terminal). Si je couraiscat
dans cet autre terminal, je verraisicanon
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
la source
stty
paramètres / ioctl que bash + readline a eux-mêmes appliqués en mode brut. (Et le fait que ce soit en mode brut, où la plupart des caractères spéciaux ne s'appliquent pas)