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

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

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

评论

只需更改密码即可:)

更改密码并不是那么简单...我需要让管理员在15台不同的服务器上重新安装我的新公钥-这个家伙就像/ dev / null。

如果您无法随时轻松更改密码,则可能存在严重的安全漏洞。当有人实际获得您的密码时,您将怎么办?您是否有任何立即取消系统访问权限的方法?

您可以更改ssh密钥的密码而不更改密钥:ssh-keygen -f id_rsa -p。

只是提到,至少在联网的Windows登录名下,您很忙。管理员(在某些较高的服务器塔中)的默认设置是记录所有登录尝试,当然,用户名是明文。进取心的人所要做的就是搜索非用户名的字符串,并将它们与下一个有效的用户名(或同一台计算机上的下一次登录尝试)相关联。而且没有简单的方法可以删除该管理日志文件。因此,您真的必须更改密码。

#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