Jeśli jesteś zmuszony do użycia skryptu Linux, aby połączyć się z zasobem chronionym hasłem, prawdopodobnie czujesz się nieswojo na umieszczenie tego hasła w skrypcie. OpenSSL rozwiązuje ten problem dla Ciebie.
Hasła i skrypty
To nie świetny pomysł na umieszczenie haseł w skryptach powłoki. W rzeczywistości jest to naprawdę zły pomysł. Jeśli skrypt spada do niewłaściwych rąk, każdy, kto czyta, może zobaczyć, co jest hasło. Ale jeśli jesteś zmuszony do użycia skryptu, co jeszcze możesz zrobić?
Możesz wprowadzić hasło ręcznie, gdy proces osiągnie ten punkt, ale jeśli skrypt będzie uruchomiony bez nadzoru, który nie zadziała. Na szczęście istnieje alternatywa dla trudnego kodowania haseł do skryptu. Kontraktowo, używa innego hasła do osiągnięcia tego, wraz z silnym szyfrowym.
W naszym przykładowym scenariuszu musimy wykonać zdalne połączenie z komputerem Fedora Linux z naszego komputera Ubuntu. Będziemy korzystać ze skryptu Bash Shell, aby wykonać połączenie SSH z komputerem Fedora. Skrypt musi uruchamiać bez nadzoru, a nie chcemy umieścić hasła do zdalnego konta w skrypcie. Nie możemy używać kluczy SSH w tym przypadku, ponieważ udajemy, że nie mamy żadnej kontroli ani uprawnień administratora na komputerze Fedora.
Wykorzystujemy dobrze znany
OPENSSL Toolkit.
Aby obsługiwać szyfrowanie i użyteczność
shphass.
Aby nakarmić hasło do polecenia ssh.
ZWIĄZANE Z: Jak tworzyć i zainstalować klucze SSH z muszli Linux
Instalowanie openssl i shphass
Ponieważ wiele innych narzędzi szyfrowania i bezpieczeństwa używają openSSL, może być już zainstalowany na komputerze. Jeśli jednak nie jest, trwa tylko chwilę, aby zainstalować.
Na Ubuntu wpisz to polecenie:
sudo apt otrzymaj openssl
Żeby zainstalować
shphass.
, użyj tego polecenia:
Sudo Apt Install Sshpass
Na Fedorze musisz wpisać:
Sudo DNF Zainstaluj openssl
Polecenie do zainstalowania
shphass.
jest:
Sudo DNF Zainstaluj SshPass
Na Manjaro Linux możemy zainstalować OpenSSL z:
sudo pacman -sy openssl
Wreszcie, aby zainstalować
shphass.
, użyj tego polecenia:
Sudo Pacman -Ssy Sshpass
Szyfrowanie na linii poleceń
Zanim dotrzemy do użycia
opensssl.
Polecenie ze skryptami, zapoznajmy się z nim, używając go w wierszu poleceń. Powiedzmy, że hasło do konta na komputerze zdalnym jest
Rusty! Herring.pitshaft.
. Szyfrujemy to hasło za pomocą
opensssl.
.
Musimy zapewnić hasło szyfrowania, gdy robimy. Hasło szyfrowania jest używane w procesach szyfrowania i deszyfrowania. Istnieje wiele parametrów i opcji w
opensssl.
Komenda. Spójrzmy na każdego z nich za chwilę.
Echo "Rusty! Herring.pitshaft" | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -Iter 100000 -Salt -pass Pass: 'Pick.your.password'
Używamy
Echo
wysłać hasło do konta zdalnego przez rurę i do
opensssl.
Komenda.
ten
opensssl.
Parametry to:
- Eng -aes-256-CBC : Typ kodowania. Używamy Zaawansowany Standard Szyfrowania 256-bitowy szyfr klucza z łańcuchem szyfrowania.
- -md sha512. : Typ trawienia wiadomości (Hash). Używamy algorytmu kryptograficznego Sha512.
-
-a
: To mówi
opensssl.Aby zastosować kodowanie bazowego-64 po fazie szyfrowania i przed fazą deszyfrowania. - -PBKDF2. : Korzystanie z funkcji derywacji kluczy na bazie hasła 2 (PBKDF2) sprawia, że jest to znacznie trudniejsze dla ataku brutalnego siły, aby odgadnąć hasło. PBKDF2 wymaga wielu obliczeń do wykonywania szyfrowania. Atakujący musiałby replikować wszystkie te obliczenia.
- -iter 100000. : Ustawia liczbę obliczeń, których użyje PBKDF2.
- -Sól : Korzystanie z losowo stosowanej wartości soli sprawia, że zaszyfrowane wyjście inne za każdym razem, nawet jeśli zwykły tekst jest taki sam.
-
-Pass Pass: 'Pick.your.password'
: Hasło musimy użyć do odszyfrowania zaszyfrowanego zdalnego hasła. Zastąpić
Pick.your.password.z solidnym hasłem wyboru.
Zaszyfrowana wersja naszego
Rusty! Herring.pitshaft.
Hasło jest zapisywane do okna terminala.
Odszyfrować to, musimy przekazać, że szyfrowany ciąg
opensssl.
z tymi samymi parametrami, które używane do szyfrowania, ale dodaliśmy w
-D
Opcja (deszyfruj).
Echo U2FSDGVKX19IIIRNENTSG + WM / UKJTZJWNYOPJYPHYRDYZH5LVZRPIGO1S0GOZU46 | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -Iter 100000 -Salt -pass Pass: 'Pick.your.password'
Ciąg jest odszyfrowany, a nasz oryginalny tekst - hasło do zdalnego konta użytkownika - jest zapisywany do okna zaciskowego.
Dowodzi to, że możemy bezpiecznie szyfrować nasze zdalne hasło konta użytkownika. Możemy również odszyfrować go, gdy potrzebujemy go za pomocą hasła, który dostarczyliśmy w fazie szyfrowania.
Ale czy to faktycznie poprawia naszą sytuację? Jeśli potrzebujemy hasła szyfrowania, aby odszyfrować hasło do konta zdalnego, na pewno hasło deszyfrowania będzie musiało być w skrypcie? Cóż, tak, tak. Ale zaszyfrowane hasło konta użytkownika zdalnego zostanie zapisane w innym, ukrytym pliku. Uprawnienia w pliku uniemożliwią każdemu, ale użytkownik korzeniowy systemu, oczywiście - dostęp do niego.
Aby wysłać wyjście z polecenia szyfrowania do pliku, możemy użyć przekierowania. Plik jest nazywany ".secret_vault.txt". Zmieniliśmy hasło szyfrowania do czegoś bardziej solidnego.
Echo "Rusty! Herring.pitshaft" | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -Iter 100000 -Salt -Spass Pass: 'Secret # Vault! Hasło' & GT; .secret_vault.txt
Nic widocznego jest widoczne, ale hasło jest szyfrowane i wysłane do pliku ".secret_vault.txt".
Możemy przetestować, że działało przez odszyfrowanie hasła w ukrytym pliku. Zauważ, że używamy
Kot
tu nie
Echo
.
Cat .secret_vault.txt | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -iter 100000 -Salt -Spass Pass: "Secret # Vault! Hasło"
Hasło jest pomyślnie odszyfrowane z danych w pliku. Dobrze
posługiwać się
Chmod.
Aby zmienić uprawnienia w tym pliku, aby nikt inny nie mógł uzyskać do niego dostępu.
Chmod 600.Secret_vault.txt
LS -L .Secret_vault.txt
Korzystanie z maski z uprawnień 600 usuwa cały dostęp dla każdego innego niż właściciel pliku. Możemy teraz przejść do pisania naszego skryptu.
ZWIĄZANE Z: Jak korzystać z polecenia Chmod na Linuksie
Używanie OpenSSL w skrypcie
Nasz skrypt jest dość prosty:
#! / Bin / bash # Nazwa konta zdalnego Remote_user = Geek. # Hasło do zdalnego konta Remote_passwd = $ (CAT # komputer zdalny Remote_linux = Fedora-34.Local # Podłącz do komputera zdalnego i umieść znacznik czasu w pliku o nazwie script.log sshpass -p $ Remote_passwd ssh -t $ Remote_user @ $ Remote_linux & LT; _Remote_commands. Echo $ Użytkownik "-" $ (data) & gt; & gt; /home/inremote_user/script.log. _remote_commands
-
Ustawiamy zmienną o nazwie
Remote_user.do "Geek". -
Następnie wywołaliśmy zmienną
Remote_passwd.Do wartości odszyfrowanych hasła wyciągniętego z pliku ".secret_vault.txt", używając tego samego polecenia, którego używaliśmy chwilę -
Lokalizacja komputera zdalnego jest przechowywana w zwanym zmiennym
Remote_linux..
Dzięki tej informacji możemy użyć
ssh.
polecenie do podłączenia do komputera zdalnego.
-
ten
shphass.Polecenie to pierwsze polecenie na linii połączenia. Używamy go z-P(Hasło) opcja. Pozwala nam to określić hasło, które powinno zostać wysłane dossh.Komenda. -
Używamy
-T(Wyłącz opcję alokacji Pseudo-Terminal) zssh.Ponieważ nie musimy mieć pseudo-tty przydzielonego do nas na komputerze zdalnym.
Używamy krótkiego
tutaj dokument
Aby przejść polecenie do komputera zdalnego. Wszystko między nimi
_Remote_commands.
Struny są wysyłane jako instrukcje do sesji użytkownika na komputerze zdalnym - w tym przypadku, jest to pojedyncza linia skryptu bash.
Polecenie wysłane do komputera zdalnego po prostu zaloguje nazwę konta użytkownika i znacznik czasu do pliku o nazwie "Script.log".
Skopiuj i wklej skrypt do edytora i zapisz go w pliku o nazwie "Go-remote.sh". Pamiętaj, aby zmienić szczegóły dotyczące odzwierciedlenia adresu własnego komputera zdalnego, zdalnego konta użytkownika i hasła zdalnego konta.
Posługiwać się
Chmod.
aby wykonywać skrypt.
Chmod + X Go-remote.SH
Pozostaje tylko wypróbować go. Wyrażajmy nasz skrypt.
./ Go-remote.SH
Ponieważ nasz skrypt jest minimalistycznym szablonem do skryptu nienadzorowanego, nie ma wyjścia do terminala. Ale jeśli sprawdzimy plik "skrypt.log" na komputerze Fedora, widzimy, że zdalne połączenia zostały pomyślnie wykonane i że plik "Script.log" został zaktualizowany za pomocą znaczników czasu.
Cat Script.log
Twoje hasło jest prywatne
Twoje hasło do konta zdalnego nie jest nagrane w skrypcie.
I chociaż hasło deszyfrujące jest, W skrypcie nikt inny nie może uzyskać dostępu do pliku ".secret_vault.txt" w celu odszyfrowania go i pobierania hasła do konta zdalnego.