如何打开隐身bash会话?


50

是否可以在中打开隐身会话bash

例如,当我们需要在命令中输入密码并且不想bash将其添加到历史记录中时。


9
cat | bash将运行非交互式,bash而不进行提示,命令行编辑(仅是行学科的内部编辑器)或历史记录。
斯特凡Chazelas

在命令前面写一个空格:“ secretcommand”。现在secrectcommand将不在bash历史中。
马丁·托马

Answers:


79

当您想bash停止记录命令时,只需取消设置HISTFILE变量:

HISTFILE=

然后,所有其他命令都将不再登录.bash_history

另一方面,如果您实际上将密码作为命令的参数来提供,则您已经在做错了事。.bash_history无法在世界范围内读取,因此在这种情况下不是最大的威胁:

ps并且/proc是很大的问题。系统上的所有用户都可以使用所有参数看到您当前正在运行的命令。因此,将密码作为命令行参数传递本质上是不安全的。使用环境变量或配置文件(已修改600)安全地提供密码。


5
我使用Linux已有10多年了,从没想过要这样做+1
eyoung100

3
unset HISTFILE具有类似的效果。我对此有一个功能:n() { HISTFILE=; PS1="~${PS1#\~}"; }。这样,我可以清楚地看到自己是否处于“隐身模式”。
Lekensteyn

13
+1用于解决实际问题,而不仅仅是回答问题。用于传递凭据的另一个选项是Unix域套接字。
内森·奥斯曼

1
另一个有用的技巧是在“ HISTFILE =“之前放置一个空格。之前没有空格的任何命令都不会记录。
FUD

另一个很酷的事情是,即使该窗口上的先前命令也被忽略。就像将现有会话改为隐身:p
Uzumaki D. Ichigo


3

您可以暂时禁用历史记录: set +o history

set +o history
...
set -o history

禁用历史记录和取消设置之间有区别HISTFILE

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

输出如下所示:

84  HISTFILE=
85  date
87  ls
88  HISTFILE=~/.bash_history
89  history

即所有命令都保存在历史列表中。输入exit以保存它。

set +o history
date
ls
set -o history
history

输出如下所示:

115  set +o history
116  history

摘要
set +o history长时间的会议。
HISTCONTROL<space>command在其他的时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.