Como faço para abrir uma sessão anônima bash?

50

É possível abrir uma sessão anônima bash?

Por exemplo, quando precisamos inserir senhas em comandos e não queremos bashadicioná-las ao histórico.

Sudoer
fonte
9
cat | bashexecutará um não-interativo bashsem prompt, edição de linha de comando (apenas o editor interno da disciplina de linha) ou histórico.
Stéphane Chazelas
Escreva um espaço na frente do seu comando: 'secretcommand'. Agora secrectcommandnão estará na história do bash.
Martin Thoma

Respostas:

79

Quando você deseja bashparar de registrar seus comandos, desative a HISTFILEvariável:

HISTFILE=

Todos os comandos adicionais não devem mais ser registrados .bash_history.

Por outro lado, se você estiver realmente fornecendo senhas como argumentos para comandos, já estará fazendo algo errado. .bash_historynão é legível para o mundo e, portanto, não é a maior ameaça nessa situação:

pse /procsão o grande problema. Todos os usuários do sistema podem ver os comandos que você está executando no momento com todos os argumentos deles . Passar senhas como argumentos de linha de comando é, portanto, inerentemente inseguro . Use variáveis ​​de ambiente ou arquivos de configuração (que você modificou no 600) para fornecer senhas com segurança.

Martin von Wittich
fonte
5
Estou usando o Linux há mais de 10 anos e nunca pensei em fazer isso +1
eyoung100 2/14
3
unset HISTFILEtem um efeito semelhante. Eu tenho uma função para isso: n() { HISTFILE=; PS1="~${PS1#\~}"; }. Dessa forma, posso ver claramente se estou no "modo de navegação anônima" ou não.
Lekensteyn
13
+1 por abordar o problema real em vez de apenas responder à pergunta. Uma opção adicional para repassar credenciais são soquetes de domínio Unix.
Nathan Osman
11
Outra dica útil seria colocar um espaço antes, ou seja, "HISTFILE =". qualquer comando com espaço anterior não é registrado.
FUD
Outra coisa interessante sobre isso é que mesmo comandos anteriores nessa janela também são ignorados. É como transformar a sessão existente no modo anônimo: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Se essa opção ainda não estiver definida bash, pode ser exatamente o que você precisa. É menos debilitante do que desabilitar toda a história. Com esse conjunto, qualquer linha de comando que comece com um caractere de espaço não será salva na lista de histórico.

A partir desses links relacionados:

Por que o bash tem uma opção HISTCONTROL = ignorespace?

Por que o bash não armazena comandos que começam com espaços?

Timothy Martin
fonte
6
Observe que esse é geralmente o padrão.
Ángel
3

Você pode desativar temporariamente o histórico: set +o history

set +o history
...
set -o history

Há uma diferença entre desabilitar o histórico e desabilitar HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

gera algo como isto:

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

ou seja, todos os comandos são salvos na lista de histórico. Digite exitpara salvá-lo.
Mas

set +o history
date
ls
set -o history
history

gera algo como isto:

115  set +o history
116  history

Resumo :
set +o historypara sessões longas.
HISTCONTROLe <space>commandem outro momento.

Evgeny Vereshchagin
fonte