Mam skrypt, który automatyzuje tworzenie kont użytkowników dla SFTP. Skrypt polega na echo, aby powtórzyć hasło do chpasswd ala:
echo <username>:<the password> | sudo chpasswd
... i openssl, aby sprawdzić wynikowe zaszyfrowane hasło, aby upewnić się, że jest poprawnie ustawione:
openssl passwd -1 -salt <salt> <the password>
Ponieważ skrypt drukuje hasło bezpośrednio w wierszu poleceń, jestem zaniepokojony tym, że pojawia się w historii basha i / lub innych niepewnych obszarach.
Rozważałem dołączenie HISTIGNORE:
HISTIGNORE="echo" echo <username>:<the password> | sudo chpasswd
Czy to niezawodnie ochroni hasło przed historią?
Odpowiedzi:
0 dla odpowiedzi № 1Polecenia w ciągu skrypt nie skończy się w twojej historii. Tylko polecenia wpisane w monicie.
Jeśli więc zadzwonisz do swojego skryptu ruby script.rb
a twój skrypt ruby wykonuje szereg poleceń powłoki, które nie zostaną zakończone w historii, a jedynie wywołanie ruby script.rb
będzie.
Z mojego zrozumienia history
standardowa funkcja bash i wykonywanie prostych poleceń za pośrednictwem irb
widzimy, że bash nie jest powłoką, która jest wywoływana przez ruby i żadna ze zmiennych ani poleceń historii nie jest obecna:
irb(main):002:0> puts `echo $0`
sh
=> nil
irb(main):003:0> puts `echo $HISTFILE`
=> nil
irb(main):004:0> puts `history`
Errno::ENOENT: No such file or directory - history
from (irb):4:in ``"
from (irb):4
from /usr/bin/irb:12:in `<main>"
irb(main):005:0>
Jedyny przypadek, w którym "znam problem, który opisujesz jako problem, to wykonywanie poleceń za pomocą expect
. W takim przypadku polecenia są wpisywane bezpośrednio w terminalu i kończą się historią. Dobrym sposobem na usunięcie tych poleceń jest użycie history -c
która wyczyści wszelkie wpisy dokonane w tej sesji.
2 dla odpowiedzi nr 2
W zależności od HISTCONTROL Zmienna, możesz uniemożliwić przechowywanie poleceń w historii, poprzedzając polecenie białymi znakami:
$ echo $HISTCONTROL
$ echo my password is foo
my password is foo
$ echo my password is bar
my password is bar
$ history | tail -3
497 echo my password is foo
498 echo my password is bar
499 history | tail -3
$ HISTCONTROL=ignorespace
$ echo my password is foo
my password is foo
$ echo my password is bar
my password is bar
$ history | tail -4
499 history | tail -3
500 HISTCONTROL=ignorespace
501 echo my password is foo
502 history | tail -4
W drugim przykładzie polecenie poprzedzone spacjami nie pojawia się w historii.
Możesz użyć history -d number
aby usunąć wpisy z historii.