我不小心在 bash 命令行中输入了密码

MaD*_*aDa 198 linux centos bash command-line

我不小心输入了密码,进入bash命令行,误将Last login: ...线路Wrong password(我很着急)。我该怎么做才能掩盖我的踪迹?

我所做的是编辑.bash_history和删除有问题的行(必须重新登录一次才能看到密码出现在文件中以便我可以删除它,然后再次重新登录以查看它从 UPARROW 键下可用的历史记录中消失)。

有没有其他地方可以保存命令历史记录?系统是CentOS 6.5。

dot*_*hen 198

您可以仅从bash的历史记录中删除违规行,而不是清除整个历史记录。只需删除带有-d标志的行,然后保存(写入)带有-w标志的新历史记录:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您设置了“PROMPT_COMMAND=history -a”,这将不起作用。有了这个,当命令终止后显示提示时,带有密码的命令会立即写入您的 .bash_history 。您必须编辑 .bash_history 才能将其删除。 (3认同)

dev*_*ull 121

这有两个部分:

  • bash将历史记录存储在一个文件~/.bash_history中,默认情况下,在会话结束时写入该文件
  • history保存在内存中的那个

为了安全起见,您需要从会话中清除它:

history -c
Run Code Online (Sandbox Code Playgroud)

并根据需要截断历史文件:

> ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

如果您输入密码的会话仍然打开,那么另一种覆盖跟踪的方法是将HISTFILE变量设置为空设备,以便~/.bash_history在会话退出时不会写入历史记录:

export HISTFILE=/dev/null
Run Code Online (Sandbox Code Playgroud)

  • 嘿看,是管理员! (207认同)
  • 偏执(但出于某种原因仍然没有更改密码)您不应该“粉碎”文件或以其他方式多次覆盖它吗? (7认同)
  • 双关语不是故意的,抱歉:) 我在写评论时没有看你的昵称。 (5认同)
  • 设置`HISTFILE=`就足够了。来自`bash(1)`:*如果未设置,则shell退出时不会保存命令历史记录。* (5认同)

R..*_*ICE 23

由于 bash(至少我知道的所有历史和当前版本)在您退出之前不会自动保存历史记录,因此当您键入要确保永远不会被保存的命令时,一个普遍适用的策略是立即键入:

kill -9 $$
Run Code Online (Sandbox Code Playgroud)

这会用 杀死外壳SIGKILL,无法捕获,因此外壳无法在退出时保存任何内容。

大多数其他方法涉及事后清理(即在数据已经到达磁盘之后),这更有可能出错(丢失副本),特别是如果系统可能正在使用 btrfs 或类似的。

  • shell 可以配置为在每个命令执行后保存历史记录,而不是在退出时保存。 (3认同)
  • +1,不仅仅是更多的错误机会,它**可能**甚至可以恢复,这取决于它之后是否/有多少命令被执行 (2认同)

mta*_*tak 11

在您不小心输入了不想存储在历史记录中的内容后,您可以输入: unset HISTFILE

当您注销时,Bash 将不知道在哪里存储历史记录,因此有效地这将禁用整个会话的历史记录。


小智 11

我最喜欢的技巧是点击向上箭头,在命令上退格,输入一些东西(可能不是必需的),点击向下箭头,输入“ls”,然后点击回车。感觉真的很古怪,但它确实有效。当我在我的历史记录中编辑错误的命令后感到恼火,然后通过不按 ctrl-c 中止编辑来破坏它时发现了这一点。我猜 bash 支持修正主义历史。;-)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3
Run Code Online (Sandbox Code Playgroud)

好像:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 
Run Code Online (Sandbox Code Playgroud)


Vol*_*gel 10

除了其他答案之外,如果终端模拟器确实保存了密码,那么在终端滚动缓冲区中也可以找到密码 - 显示文本的历史 - 现在,还有更多的问题,可能在硬盘上历史记录到磁盘。这发生在 KDE konsole 中,历史大小设置为“无限回滚”,从不丢弃任何输出。


小智 7

使用$<space> command,命令不会添加到历史记录中,有时很有用

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此前导空格技巧仅在 $HISTCONTROL 包含 ignorespace 时才有效。 (4认同)
  • 虽然很有趣,但尚不清楚这在所描述的场景中有何用处。您是否建议每个密码都应以空格开头? (2认同)
  • @jris198944 通过命令行参数提供密码可能会将其暴露给系统上运行 `ps` 的任何人。 (2认同)
  • 无论如何,虽然如果您提前计划,这个技巧很有用,但这对某人*意外*在命令行上输入密码的原始场景无济于事。 (2认同)