Jak otworzyć sesję bash incognito?

50

Czy można otworzyć sesję incognito bash?

Na przykład, gdy musimy wprowadzić hasła w poleceniach i nie chcemy bashdodawać ich do historii.

Sudoer
źródło
9
cat | bashuruchomi nieinteraktywną bashbez pytania, edycję z wiersza poleceń (tylko wewnętrzny edytor dyscypliny) lub historię.
Stéphane Chazelas
Napisz spację przed swoim poleceniem: „secretcommand”. Teraz secrectcommandnie będzie w historii bash.
Martin Thoma,

Odpowiedzi:

79

Jeśli chcesz bashprzestać rejestrować swoje polecenia, po prostu wyłącz HISTFILEzmienną:

HISTFILE=

Wszystkie dalsze polecenia nie powinny być już logowane .bash_history.

Z drugiej strony, jeśli faktycznie podajesz hasła jako argumenty dla poleceń, już robisz coś złego. .bash_historynie jest czytelny na całym świecie i dlatego nie jest największym zagrożeniem w tej sytuacji:

psi /procsą dużym problemem. Wszyscy użytkownicy w systemie mogą zobaczyć polecenia, które aktualnie wykonujesz, wraz ze wszystkimi ich argumentami . Przekazywanie haseł jako argumentów wiersza poleceń jest zatem z natury niepewne . Użyj zmiennych środowiskowych lub plików konfiguracyjnych (które chmodded 600) do bezpiecznego dostarczania haseł.

Martin von Wittich
źródło
5
Używam Linuksa od ponad 10 lat i nigdy nie myślałem o zrobieniu tego +1
eyoung100
3
unset HISTFILEma podobny efekt. Mam funkcję to: n() { HISTFILE=; PS1="~${PS1#\~}"; }. W ten sposób wyraźnie widzę, czy jestem w trybie incognito, czy nie.
Lekensteyn
13
+1 za rozwiązanie prawdziwego problemu, a nie tylko odpowiedź na pytanie. Dodatkową opcją przekazywania informacji uwierzytelniających są gniazda domeny UNIX.
Nathan Osman
1
Inną przydatną wskazówką byłoby wstawienie spacji przed, np. „HISTFILE =”. każde polecenie ze spacją wcześniej nie jest rejestrowane.
FUD
Kolejną fajną rzeczą jest to, że nawet poprzednie polecenia w tym oknie są również ignorowane. To jest jak zmiana istniejącej sesji na incognito: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Jeśli ta opcja nie jest jeszcze ustawiona bash, może być właśnie tym, czego potrzebujesz. Jest mniej wyniszczający niż wyłączenie całej historii. Przy takim zestawie jakikolwiek wiersz poleceń zaczynający się od znaku spacji nie zostanie zapisany na liście historii.

Z tych powiązanych linków:

Dlaczego bash ma opcję HISTCONTROL = ignorowanie?

Dlaczego bash nie przechowuje poleceń rozpoczynających się spacjami?

Timothy Martin
źródło
6
Uwaga: często jest to ustawienie domyślne.
Ángel
3

Możesz tymczasowo wyłączyć historię: set +o history

set +o history
...
set -o history

Istnieje różnica między wyłączeniem historii a rozbrojeniem HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

wypisuje coś takiego:

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

tzn. wszystkie polecenia są zapisywane na liście historii. Wpisz, exitaby go zapisać.
Ale

set +o history
date
ls
set -o history
history

wypisuje coś takiego:

115  set +o history
116  history

Podsumowanie :
set +o historyna długie sesje.
HISTCONTROLi <space>commandw innym czasie.

Evgeny Vereshchagin
źródło