web-dev-qa-db-fra.com

J'ai accidentellement tapé le mot de passe en ligne de commande bash

J'ai accidentellement tapé mon mot de passe dans la ligne de commande bash, confondant la ligne Last login: ... avec Wrong password (j'étais pressé). Que dois-je faire pour recouvrir ma trace?

Ce que j’ai fait, c’est édité .bash_history et supprimé la ligne incriminée (je devais me reconnecter une fois pour que le mot de passe apparaisse dans le fichier afin que je puisse le supprimer, puis me reconnecter pour le voir disparaître de l’historique disponible sous la touche UPARROW).

Existe-t-il un autre endroit où l'historique des commandes pourrait être sauvegardé? Le système est CentOS 6.5.

186
MaDa

Vous pouvez supprimer uniquement la ligne incriminée de l'historique bash au lieu d'effacer tout l'historique. Supprimez simplement la ligne avec l'indicateur -d, puis sauvegardez (écrivez) le nouvel historique avec l'indicateur -w:

$ history
351 ssh [email protected]
352 my_password
$ history -d 352
$ history -w
183
dotancohen

Il y a deux parties à ceci:

  • bash stocke l'historique dans un fichier ~/.bash_history qui est écrit par défaut à la fin de la session.
  • la history conservée en mémoire

Pour être en sécurité, vous devez l'effacer de la session:

history -c

et tronquer le fichier d'historique selon les besoins:

> ~/.bash_history

Si votre session dans laquelle vous avez saisi le mot de passe est toujours ouverte, une autre façon de couvrir votre trace consiste à définir la variable HISTFILE sur le périphérique null afin que l'historique ne soit pas écrit dans ~/.bash_history lorsque la session sera fermée:

export HISTFILE=/dev/null
121
devnull

Puisque bash (du moins toutes les versions historiques et actuelles dont je suis au courant) n'enregistre pas automatiquement l'historique tant que vous n'avez pas quitté, une stratégie généralement applicable lorsque vous avez saisi une commande que vous souhaitez vous assurer de ne jamais enregistrer est de taper immédiatement:

kill -9 $$

Cela tue le Shell avec SIGKILL, qui ne peut pas être attrapé, ainsi le Shell n'a aucun moyen de sauvegarder quoi que ce soit à la sortie.

La plupart des autres approches impliquent un nettoyage après coup (c'est-à-dire après que les données ont déjà été insérées sur le disque), ce qui a beaucoup plus de risques d'erreur (copie manquante), en particulier si le système utilise peut-être btrfs ou similaire.

23
R..

Mon astuce préférée pour cela est de frapper la flèche vers le haut, de revenir en arrière sur la commande, de taper quelque chose (ce n’est peut-être pas nécessaire), de frapper la flèche vers le bas, de taper "ls", et d’appuyer sur Entrée. Se sent vraiment hokey, mais cela fonctionne réellement. J'ai découvert cela quand je me suis énervé après avoir édité la mauvaise commande de mon historique, puis en la ruinant en ne tapant pas sur Ctrl-C pour annuler l'édition. J'imagine que bash soutient l'histoire révisionniste. ;-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

Ressemble à:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 
11
Mark Jerde

Après avoir accidentellement saisi quelque chose que vous ne souhaitiez pas stocker dans l'historique, vous pouvez taper: unset HISTFILE

Bash ne saura pas où stocker l'historique lorsque vous vous déconnectez. Par conséquent, cela désactivera la journalisation de l'historique pour toute la session.

11
mtak

En plus des autres réponses, il peut être pertinent que le mot de passe se trouve également dans la mémoire tampon de défilement du terminal - l'historique du texte affiché - maintenant, et, ce qui est plus un problème, éventuellement sur le disque dur, si l'émulateur de terminal a effectivement sauvegardé le fichier. l'histoire sur le disque. Cela se produit dans KDE si la taille de l’historique est définie sur "scrollback illimité", afin de ne jamais supprimer aucune sortie.

10
Volker Siegel

Avec $<space> command, aucune commande n'est ajoutée à l'historique, parfois utile

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep
5
jris198944

Une autre solution pour éviter d’enregistrer dans le fichier d’historique (avant de vous déconnecter) consiste simplement à chmod 444 ~/.bash_history, puis à vous déconnecter. Connectez-vous à nouveau et réinitialisez les autorisations (ou non, selon votre paranoïa!).

4
Adam

Je vois à plusieurs reprises mentionné

Sachez que cela ne fonctionne pas si vous avez défini "Prompt_COMMAND = history -a" [..] Vous devrez modifier votre .bash_history pour le supprimer.

La première partie est certainement vraie, mais vous n'avez pas besoin de recourir à l'édition manuelle de .bash_history pour résoudre ce problème. Si vous combinez les deux commandes sur une ligne, cela fonctionne parfaitement:

$ history
351 ssh [email protected]
352 my_password
$ history -d 352 ; history -w
1

Beaucoup de réponses ici tentent de supprimer la commande en question de l'historique de la session curr not bas avant de l'écrire dans $HISTFILE (~/.bash_history par défaut). Cependant, si vous avez défini Prompt_COMMAND=history -a, la commande avec votre mot de passe est immédiatement écrite dans votre $HISTFILE lorsque l'invite s'affiche une fois la commande terminée. Vous devrez éditer votre $HISTFILE pour le supprimer.

Ce paramètre est couramment utilisé pour entrelacer les commandes de plusieurs sessions bash ouvertes .

0
benrifkah