Question Supprimer le mot de passe saisi dans l'invite de mot de passe masqué (Linux) avec un raccourci


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

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

Existe-t-il un moyen de supprimer tout mon texte saisi sans avoir à appuyer sur Backspace pendant une durée inconnue? Quand je pense avoir entré quelque chose de mal, je veux recommencer et appuyer sur Backspace pendant quelques secondes me gêne. j'ai essayé Esc, CtrlUNE pour espérer sélectionner le texte entier et Accueil. CtrlC annule la commande entière et je dois renvoyer la commande pour réessayer. C'est presque la solution la meilleure et la plus rapide, mais toujours pas satisfaisante. L'insertion ne fonctionne pas non plus dans mon shell.


105
2017-11-01 14:05


origine


En ce qui concerne Ctrl + A, dans le terminal, cela signifie généralement "aller au début de la ligne". L'ensemble des clés utilisées dans le terminal (en particulier bash) est souvent plus proche d'Emacs que de Windows. - Score_Under
Sshing en tant que root est généralement considéré comme une très mauvaise pratique. - Sam
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. - AFH
Veuillez faire attention à ce que @Sam a dit. Vous devriez désactiver les connexions root partout. Connectez-vous en tant qu'utilisateur régulier avec un mot de passe compliqué, puis su devenir racine. L'étape suivante consiste à désactiver les schémas d'authentification par mot de passe dans SSH et à utiliser les clés pour la connexion. - kostix
@kostix Je suis sûr que la désactivation des mots de passe devrait être la première étape. Si vous utilisez des mots de passe, puis avec su et désactivé root, il suffit de saisir le mot de passe que l'attaquant a déjà deviné une seconde fois après la connexion, vous ne gagnez donc que si le nom d'utilisateur est difficile à deviner. Je suppose sans avoir de statistiques. Et sans mot de passe, il ajoute un second secret, le mot de passe, mais cela vaut moins que la clé privée qui est un secret plus long. - Nobody


Réponses:


Vous pouvez supprimer tout le mot de passe tapé avec Ctrl+U.


162
2017-11-01 14:07



Cela fonctionne également dans l'invite de terminal régulière aussi! - MoonRunestar
Pour référence, il s'agit de la liaison de clé par défaut dans le "mode emacs" de readline pour unix-line-discard, décrite comme "Tuer en arrière du curseur 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 ne pas construit dans le tty, donc cela ne fonctionnera pas partout). - IMSoP
@IMSoP Cependant, Ctrl-U lui-même est construit dans le tty (comme caractère par défaut pour le stty kill fonction), ce qui explique pourquoi il fonctionne avec l'invite de mot de passe ssh. - Random832
BTW, Ctrl + K est l'équivalent pour supprimer du curseur sur le fin de la ligne. - wjandrea
@ DennisJaheruddin: Ce n'est pas possible, ssh n'utilise pas readline pour fournir une édition de ligne. Voir ma réponse - Peter Cordes


contrairement à bash, sshL'invite de mot de passe n'utilise pas de bibliothèque spéciale terminal-entrée comme readline.  Les fonctionnalités de modification de ligne ne sont que les fonctions de base d'édition de ligne POSIX TTY.

Vous avez donc un POSY TTY en mode "cooked" (pas brut), alias le 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 aussi là que le caractère de retour arrière est défini (erase = ^?). Effacement des mots (^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 littéral-c.

Pour déboguer ce que vous tentiez de faire aveuglément, exécutez cat ou cat > /dev/null dans votre terminal. Tapez des trucs, puis voyez ce qui fonctionne et ce qu’il ne faut pas modifier.


readline (utilisé par bash) lit le caractère brut et modifie la 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 de fonctionnalités d'édition qu'ils fournissent tous les deux.

readline va bien au-delà de la simple modification de ligne d'un ATS ordinaire. (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 delete ou flèche gauche / droite)

Quand bash exécute une commande au premier plan, il place d'abord le TTY en mode canonique (parce que c'est la valeur par défaut). Donc en cours d'exécution stty -a (sans redirection) verra toujours son propre terminal en mode canonique. Mais si vous redirigez les entrées d’un autre téléscripteur qui a bash en cours d'exécution, vous pouvez voir quels paramètres de terminal bash + readline appliqués. par exemple. stty -a < /dev/pts/12 montre -icanon pour le mode brut parce que j'ai un bash en cours d'exécution sur ce terminal. (Je suis passé à un autre onglet et j'ai couru tty, puis utilisé ce chemin de fichier de périphérique à partir du premier terminal). Si j'ai couru cat dans cet autre terminal, je verrais icanon pour le mode canonique.

En relation: Le TTY démystifié

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

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


13
2017-11-02 14:05



Vous pouvez en fait simplement taper «stty» pour voir tous les paramètres actuels. L'utilisation de 'stty rows ##' ou de 'stty cols ##' vous permettra de modifier à la volée le nombre de lignes ou de colonnes disponibles dans la fenêtre du terminal. Ce qui est particulièrement pratique lorsque vous travaillez dans une fenêtre dans une fenêtre à travers quelque chose comme VNC qui n'attrape pas forcément la taille de votre fenêtre extérieure. Vous pouvez essentiellement définir votre zone active pour qu'elle soit plus petite que la fenêtre dans laquelle elle se trouve et ne plus avoir à faire défiler la zone. Permettre à VI et à d'autres choses de continuer à fonctionner correctement. Il peut également remapper en arrière et supprimer à la volée. - Rowan Hawkins
@RowanHawkins: mon dernier paragraphe a été mal édité. Correction maintenant J'essayais de faire remarquer qu'en redirigeant depuis un autre tty, vous pouvez voir le stty / paramètres ioctl que bash + readline lui-même a appliqué en mode brut. (Et le fait qu'il soit en mode brut du tout, où la plupart des caractères spéciaux ne s'appliquent pas) - Peter Cordes