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)
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)
R..*_*ICE 23
由于 bash(至少我知道的所有历史和当前版本)在您退出之前不会自动保存历史记录,因此当您键入要确保永远不会被保存的命令时,一个普遍适用的策略是立即键入:
kill -9 $$
Run Code Online (Sandbox Code Playgroud)
这会用 杀死外壳SIGKILL,无法捕获,因此外壳无法在退出时保存任何内容。
大多数其他方法涉及事后清理(即在数据已经到达磁盘之后),这更有可能出错(丢失副本),特别是如果系统可能正在使用 btrfs 或类似的。
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)