我想在终端中运行几个命令,这些命令需要我提供密码。我真的不希望这些命令以任何形式的历史记录或其他任何可能在命令运行后被他人看到的地方结束。是否有任何 Ubuntu shell/终端可供我使用(或 bash/zsh/etc 选项),它们可以为我提供一个安全的环境,让我不必担心我的历史记录被保留?
答案1
你真的是说这些命令要求你指定密码作为参数吗?大多数命令都会提示你输入密码,但密码不会进入任何历史文件。
请注意,如果您使用的是多用户计算机,其他用户在ps
正确的时间调用时可以看到您执行的命令。因此,除非您调用虚拟机等增援,否则战斗将会失败。
好的,让我们假设您的命令写得确实很糟糕,或者您由于其他原因不想留下这些命令的痕迹。
所有具有历史记录保存功能的 shell 都允许您将其关闭(每个 shell 都有自己的命令),并且许多 shell 可以从历史记录列表中排除某些命令(即,不仅将它们从历史记录文件中排除,而且使它们无法被命令访问Up(转储您的 RAM 的人仍可能会找到它们)。在 bash 和 zsh 中,如果未设置,则在 shell 退出时不会保存历史记录HISTFILE
(请注意,如果启用了该选项,zsh 也可能保存每个命令后的历史记录inc_append_history
)。在 bash 中,与 中的模式匹配的行HISTIGNORE
不会记录在历史记录中;在 zsh 中,您只能决定使用该hist_ignore_space
选项忽略以空格开头的命令。这两个 shell 都允许您使用其内置命令编辑历史记录fc
。
您输入的任何内容(屏幕上可见的内容)都存储在终端的历史记录中。这通常很容易清除(通常通过菜单项,或者只需退出终端仿真器)。当然,您不应该使用记录所有输出的终端,但如果您这样做了,可能是因为您对其进行了配置,所以您应该知道。
如果您担心特定字符串(例如密码),您可以将其存储在文件中(当然,将其保存在加密的文件系统中),并在需要时调用其内容(这样,有人在您身后偷看就没有机会看到密码):
mycommand -u herms -p "$(cat ~/encrypted/passwords/mycommand)"
该命令可能会留下其他残渣。您可以尝试运行 shell,并将HOME
环境变量设置为临时目录,只需将 shell rc 和命令的配置文件复制到该目录中即可。运行该命令后,检查是否要保留其生成的任何数据,然后删除临时目录。示例会话:
mkdir /tmp/private
chmod 700 /tmp/private
cp -a ~/.zshrc ~/.config/mycommand /tmp/private
HOME=/tmp/private zsh
# subsequent commands are executed from the child shell started above
cd
mycommand ...
exit
# back to the parent shell
# inspect /tmp/private for files you want to keep
rm -rf /tmp/private
如果您关心的不仅仅是保护密码,更彻底的方法是创建一个不同的用户并以该用户的身份运行命令。这样做的好处是,即使命令写得不好,也不会因为没有权限而在您的主目录中留下有危害的输出。您可以配置该用户的 shell 不留下历史记录,并根据需要清理其主目录。
答案2
使用 zsh 时,您可以在命令行前面放置一个空格,这将阻止该命令存储在历史记录中:
HIST_IGNORE_SPACE (-g)
Remove command lines from the history list when the first
character on the line is a space, or when one of the expanded
aliases contains a leading space.
Note that the command lingers in the internal history until
the next command is entered before it vanishes, allowing you to
briefly reuse or edit the line. If you want to make it vanish
right away without entering another command, type a space and
press return.
使用setopt HIST_IGNORE_SPACE
来.zshrc
激活该功能。
答案3
这是 BASH shell 的全部内容:history -c
将清除历史列表并
history -d N
将删除历史记录条目 N。
您还可以修改 .bashrc 文件以包含
export HISTIGNORE="[ ]*"
这将强制历史记录忽略任何以空格开头的命令。
export HISTIGNORE="&:[ ]*:exit"
将强制历史记录忽略任何重复的命令、以空格开头的条目并退出。