Last login: ...
行误认为Wrong password
(我很急)。我该怎么做才能掩盖我的踪迹?我所做的是编辑
.bash_history
并删除了违规行(必须重新登录一次才能看到密码出现在文件中,以便我可以将其删除,然后再次重新登录看到它从UPARROW键下可用的历史记录中消失了。)还有其他地方可以保存命令历史记录吗?系统是CentOS 6.5。
#1 楼
您只能从bash
的历史记录中删除有问题的行,而不是清除整个历史记录。只需删除带有-d
标志的行,然后使用-w
标志保存(写入)新的历史记录即可:$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w
评论
请注意,如果您设置了“ PROMPT_COMMAND = history -a”,则此操作将无效。使用此命令后,当命令终止后显示提示时,带有密码的命令将立即写入.bash_history。您必须编辑.bash_history才能将其删除。
– Benrifkah
17年8月31日在17:20
还要注意,如果将该行写入了宿主文件,并且后来打开了多个外壳程序(终端窗口),则所有这些外壳程序都将在此历史记录中包含它!您将需要从所有这些shell中删除它,或者至少从您关闭的历史LAST shell中删除它!最好在使用它的外壳存在之前获取它。处理多个炮弹的历史可能成为噩梦。
–安东尼
19年7月2日在1:41
@benrifkah,您保存了我的一天。我知道这个答案应该起作用,但是没有,我不知道为什么。取消设置PROMPT_COMMAND后,它应能正常工作。
–törzsmókus
20-4-9在14:52
#2 楼
这有两部分:bash
将历史记录存储在文件~/.bash_history
中,该文件默认情况下在会话结束时写入。保存在内存中的history
为了安全起见,您需要从会话中清除它:
history -c
并将历史文件截断为需要:
> ~/.bash_history
如果您输入密码的会话仍处于打开状态,则覆盖跟踪的另一种方法是将
HISTFILE
变量设置为空设备,以便在会话退出时不会将历史记录写入~/.bash_history
:export HISTFILE=/dev/null
评论
嗨,看,是管理员!
–雷斯塔法里安
2014年4月2日在14:19
双关语不是故意的,对不起:)我写评论时没有看你的昵称。
–马大
2014年4月2日在23:43
出于偏执(但由于某种原因仍然无法更改密码),您是否不应该粉碎文件或以其他方式覆盖文件很多次?
– kojiro
2014年4月3日在2:02
@MaDa没问题。我什至在答案中添加了另一种方法,将我的昵称带入图片。
– devnull
2014年4月3日在4:14
设置HISTFILE =就足够了。从bash(1):如果未设置,则退出shell时不会保存命令历史记录。
– Lekensteyn
2014年4月3日在9:16
#3 楼
由于bash(至少我知道的所有历史版本和当前版本)在退出之前不会自动保存历史记录,因此在键入要确保永远不会保存的命令时,通常适用的策略是立即键入:kill -9 $$
这会杀死无法捕获的
SIGKILL
外壳,因此外壳无法在退出时保存任何内容。大多数其他方法包括事后清理(即在数据已经到达磁盘之后),这有很大的出错机会(丢失副本),尤其是在系统可能使用btrfs或类似系统的情况下。
评论
+1,不仅有更多的出错机会,甚至可以恢复,具体取决于是否执行了多少命令
– Cruncher
2014年4月2日在17:01
缺少“自动”一词?因为dotancohen显示了一种无需退出shell即可保存历史记录的方法。
– Ben Voigt
2014年4月2日在18:00
可以将Shell配置为在执行每个命令之后而不是退出时保存历史记录。
–尼克·马特奥(Nick Matteo)
2014年4月3日,下午3:17
+1这正是我要推荐的!除了rm〜/ .bash_history〜以外,还可以在OP已保存的情况下删除备份文件
– Tomas
2014年4月8日在7:23
请注意,如果您设置了“ PROMPT_COMMAND = history -a”,则此操作将无效。使用此命令后,当命令终止后显示提示时,带有密码的命令将立即写入.bash_history。您必须编辑.bash_history才能将其删除。
– Benrifkah
17年8月31日在17:19
#4 楼
意外键入了不想存储在历史记录中的内容后,可以键入:unset HISTFILE
注销时Bash不会知道存储历史记录的位置,因此有效地这将禁用整个会话的历史记录。
评论
请注意,如果您设置了“ PROMPT_COMMAND = history -a”,则此操作将无效。使用此命令后,当命令终止后显示提示时,带有密码的命令将立即写入.bash_history。您必须编辑.bash_history才能将其删除。
– Benrifkah
17年8月31日在17:18
#5 楼
我最喜欢的技巧是按下向上箭头,在命令上退格,键入一些内容(可能没有必要),按下向下箭头,键入“ ls”,然后按下Enter。感觉真的很曲折,但实际上有效。当我在历史记录中编辑了错误的命令后感到烦恼,然后通过不按ctrl-c终止编辑而破坏了它时,发现了这一点。我猜bash支持修订主义者的历史。 ;-)$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3
外观类似:
$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
2445* cd
2446 echo hi
2447 history|tail -3
$
评论
那真是怪了。一个缺点是,它似乎知道您已编辑历史记录,因此可能有某种方法可以还原旧版本?
– MadTux
2014年4月6日在8:21
@MadTux-完全可以,但是.bash_history只是纯文本文件。因此,您可以执行上面的示例,退出并重新连接。当您查看.bash_history文件的完整内容时,没有什么可以区别于仅运行“ cd”文件的地方,因此该记录很干净。
–马克·杰德(Mark Jerde)
2014年4月7日在18:36
请注意,如果您设置了“ PROMPT_COMMAND = history -a”,则此操作将无效。使用此命令后,当命令终止后显示提示时,带有密码的命令将立即写入.bash_history。您必须编辑.bash_history才能将其删除。
– Benrifkah
17年8月31日在17:17
#6 楼
除了其他答案外,现在还可以在终端滚动缓冲区中找到密码(显示的文本的历史记录),如果终端仿真器确实保存了密码,则可能还有其他问题,可能是在硬盘上。历史记录到磁盘。这发生在KDE konsole中,因为历史记录大小设置为“无限制回滚”,所以从不丢弃任何输出。
#7 楼
使用$<space> command
时,没有将命令添加到历史记录中,有时很有用l $ history | grep mywierdgrep
$ history | grep mywierdgrep
2005 history | grep mywierdgrep
评论
尽管很有趣,但尚不清楚在所描述的场景中这是否有用。您是否建议每个密码都应以空格开头?
– Ben Voigt
2014年4月2日在17:59
不,他的建议是将其放置在适当的位置,您键入的任何不希望提交给历史的行都应在前导空格处键入。例如:“ ls”变成“ ls”,并且该行从不显示在历史记录或会话的上箭头列表中。
–布莱恩·C。
2014年4月2日在18:05
请注意,只有$ HISTCONTROL包含ignorespace时,此前导空格技巧才起作用。
– Bernd Jendrissek
2014年4月3日在1:35
@ jris198944通过命令行参数提供密码可能会将密码公开给运行ps的系统上的任何人。
–詹姆士林
2014年4月7日,下午3:58
而且无论如何,尽管如果您要提前计划,此技巧很有用,但这对最初有人意外在命令行输入密码的情况没有帮助。
–詹姆士林
2014年4月7日于4:00
#8 楼
避免保存到历史记录文件(注销之前)的另一种方法是简单地chmod 400 ~/.bash_history
然后注销。停止将历史记录写入文件(因为文件是只读的),因此整个bash会话将被丢弃并保留以前的历史记录。
再次登录并将权限重置为
600
(或不,取决于你有多偏执!)。#9 楼
我看到反复提到的请注意,如果您设置了“ PROMPT_COMMAND = history -a” [..],这将不起作用。您必须将.bash_history编辑为删除它。
第一部分肯定是正确的,但是您不必借助手动编辑.bash_history即可对其进行修复。
如果在一行非常完美:
$ history
351 ssh me@site.com
352 my_password
$ history -d 352 ; history -w
评论
您能解释一下什么使该方法有效吗?
–卡米尔·马乔洛夫斯基(Kamil Maciorowski)
17年12月7日14:49在
仅在显示下一个命令提示符之前执行PROMPT_COMMAND。在单独的行上输入-d和-w命令的问题是PROMPT_COMMAND将在两者之间执行history -a命令。如果在一个命令行上同时执行-d和-w,则仅在之后执行
–弗洛里斯·克鲁斯塞尔布林克
17 Dec 8'在10:42
#10 楼
此处的许多答案试图在将当前命令未写入bash会话的历史记录中删除该命令之前,先将其写入$HISTFILE
(默认情况下为〜/ .bash_history)。但是,如果已设置PROMPT_COMMAND=history -a
,则在命令终止后显示提示时,带有密码的命令将立即写入
$HISTFILE
。您必须编辑$HISTFILE
才能将其删除。此设置通常用于交错来自多个打开的bash会话的命令。
#11 楼
您还将需要检查syslog日志。无效的登录名通常会记录到syslog中。/ var / log / messages或与您的操作系统等效的信息。
评论
问题不在于他输入了错误的密码,他已经登录并在提示中输入密码,然后按回车键。这不会显示在消息文件中。
– MaQleod
2014年4月5日19:33
评论
只需更改密码即可:)更改密码并不是那么简单...我需要让管理员在15台不同的服务器上重新安装我的新公钥-这个家伙就像/ dev / null。
如果您无法随时轻松更改密码,则可能存在严重的安全漏洞。当有人实际获得您的密码时,您将怎么办?您是否有任何立即取消系统访问权限的方法?
您可以更改ssh密钥的密码而不更改密钥:ssh-keygen -f id_rsa -p。
只是提到,至少在联网的Windows登录名下,您很忙。管理员(在某些较高的服务器塔中)的默认设置是记录所有登录尝试,当然,用户名是明文。进取心的人所要做的就是搜索非用户名的字符串,并将它们与下一个有效的用户名(或同一台计算机上的下一次登录尝试)相关联。而且没有简单的方法可以删除该管理日志文件。因此,您真的必须更改密码。