¿Cómo abro una sesión de incógnito bash?

50

¿Es posible abrir una sesión de incógnito en bash?

Por ejemplo, cuando necesitamos ingresar contraseñas en los comandos y no queremos bashagregarlas al historial.

Sudoer
fuente
99
cat | bashejecutará una bashedición no interactiva sin solicitud de línea de comandos (solo el editor interno de la disciplina de línea) o el historial.
Stéphane Chazelas
Escriba un espacio delante de su comando: 'secretcommand'. Ahora secrectcommandno estará en la historia de bash.
Martin Thoma

Respuestas:

79

Cuando desee bashdejar de registrar sus comandos, simplemente desarme la HISTFILEvariable:

HISTFILE=

Todos los comandos adicionales ya no deberían estar registrados .bash_history.

Por otro lado, si en realidad está proporcionando contraseñas como argumentos para los comandos, ya está haciendo algo mal. .bash_historyno es legible en el mundo y, por lo tanto, no es la mayor amenaza en esta situación:

psY /procson el gran problema. Todos los usuarios del sistema pueden ver los comandos que está ejecutando actualmente con todos sus argumentos . Por lo tanto, pasar contraseñas como argumentos de línea de comandos es inherentemente inseguro . Utilice variables de entorno o archivos de configuración (que ha modificado 600) para proporcionar contraseñas de forma segura.

Martin von Wittich
fuente
55
He estado usando Linux 10+ años y nunca pensé hacer esto +1
eyoung100
3
unset HISTFILEtiene un efecto similar Tengo una función para esto: n() { HISTFILE=; PS1="~${PS1#\~}"; }. De esa manera puedo ver claramente si estoy en "modo incógnito" o no.
Lekensteyn
13
+1 por abordar el problema real en lugar de simplemente responder la pregunta. Una opción adicional para pasar las credenciales son los sockets de dominio Unix.
Nathan Osman el
1
Otro consejo útil sería poner un espacio antes, es decir, "HISTFILE =". cualquier comando con espacio antes no se registra.
FUD
Otra cosa interesante de esto es que incluso los comandos anteriores en esa ventana también se ignoran. Es como convertir la sesión existente a incógnito: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Si esta opción aún no está configurada bash, puede ser justo lo que necesita. Es menos debilitante que deshabilitar toda la historia. Con ese conjunto, cualquier línea de comando que comience con un carácter de espacio no se guardará en la lista del historial.

De estos enlaces relacionados:

¿Por qué bash tiene una opción HISTCONTROL = ignorespace?

¿Por qué bash no almacena comandos que comienzan con espacios?

Timothy Martin
fuente
66
Tenga en cuenta que esto suele ser el valor predeterminado.
Ángel
3

Puedes deshabilitar temporalmente el historial: set +o history

set +o history
...
set -o history

Hay una diferencia entre deshabilitar el historial y desarmar HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

produce algo como esto:

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

es decir, todos los comandos se guardan en la lista del historial. Escribe exitpara guardarlo.
Pero

set +o history
date
ls
set -o history
history

produce algo como esto:

115  set +o history
116  history

Resumen :
set +o historypara largas sesiones.
HISTCONTROLy <space>commanden otro momento

Evgeny Vereshchagin
fuente