Как открыть сеанс инкогнито bash?

50

Можно ли открыть сеанс инкогнито в bash?

Например, когда нам нужно вводить пароли в командах и не хотим bashдобавлять их в историю.

Sudoer
источник
9
cat | bashбудет работать неинтерактивно bashбез приглашения, редактирования из командной строки (только внутренний редактор дисциплины) или истории.
Стефан Шазелас
Напишите пробел перед вашей командой: 'secretcommand'. Теперь secrectcommandне будет в истории Bash.
Мартин Тома

Ответы:

79

Если вы хотите bashпрекратить запись ваших команд, просто удалите HISTFILEпеременную:

HISTFILE=

Все дальнейшие команды больше не должны регистрироваться .bash_history.

С другой стороны, если вы фактически вводите пароли в качестве аргументов для команд, вы уже делаете что-то не так. .bash_historyне является общедоступным и, следовательно, не самой большой угрозой в этой ситуации:

psи /procявляются большой проблемой. Все пользователи системы могут видеть команды, которые вы в данный момент выполняете, со всеми их аргументами . Поэтому передача паролей в качестве аргументов командной строки по своей сути небезопасна . Используйте переменные окружения или конфигурационные файлы (которые у вас есть chmodded 600) для безопасной подачи паролей.

Мартин фон Виттих
источник
5
Я использую Linux 10+ лет и никогда не думал, что
смогу
3
unset HISTFILEимеет аналогичный эффект. У меня есть функция для этого: n() { HISTFILE=; PS1="~${PS1#\~}"; }. Таким образом, я ясно вижу, нахожусь ли я в «режиме инкогнито» или нет.
Лекенштейн
13
+1 за решение реальной проблемы, а не просто ответ на вопрос. Дополнительной опцией для передачи учетных данных являются доменные сокеты Unix.
Натан Осман
1
Еще один полезный совет - поставить пробел перед "HISTFILE =". любая команда с пробелом до не регистрируется.
FUD
Еще одна интересная вещь - это то, что даже предыдущие команды в этом окне также игнорируются. Это похоже на превращение существующего сеанса в инкогнито: p
Узумаки Д. Ичиго,
37
HISTCONTROL=ignorespace

Если эта опция еще не установлена bash, это может быть именно то, что вам нужно. Это менее изнурительно, чем отключение всей истории. С этим набором любая командная строка, начинающаяся с символа пробела, не будет сохранена в списке истории.

Из этих ссылок:

Почему в bash есть опция HISTCONTROL = ignorespace?

Почему bash не хранит команды, начинающиеся с пробелов?

Тимоти Мартин
источник
6
Обратите внимание, что это часто по умолчанию.
Анхель
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в другое время.

Евгений Верещагин
источник