Dacă sunteți obligat să utilizați un script Linux pentru a vă conecta la o resursă protejată prin parolă, probabil că vă simțiți neliniștiți pentru a pune această parolă în script. OpenSSL rezolvă problema pentru tine.
Parole și scripturi
Nu este o idee minunată să puneți parole în scripturi Shell. De fapt, este o idee foarte proastă. Dacă scenariul se încadrează în mâinile greșite, toți cei care citesc că poate vedea ce este parola. Dar dacă sunteți forțat să utilizați un script, ce altceva puteți face?
Puteți introduce parola manual când procesul atinge acel punct, dar dacă scenariul va funcționa nesupravegheat, asta nu va funcționa. Din fericire, există o alternativă la codificarea hard a parolelor în script. Contraintuitiv, utilizează o parolă diferită pentru a realiza acest lucru, împreună cu o criptare puternică.
În scenariul nostru exemplu, trebuie să facem o conexiune la distanță la un computer Fedora Linux de la computerul nostru Ubuntu. Vom folosi un script de shell Bash pentru a face o conexiune SSH la computerul Fedora. Scriptul trebuie să funcționeze nesupravegheat și nu vrem să punem parola pentru contul de la distanță în script. Nu putem folosi cheile SSH în acest caz, deoarece ne prefacem că nu avem drepturi de control sau de administrare asupra computerului Fedora.
Vom folosi bine-cunoscutul
OpenSSL Toolkit
să se ocupe de criptare și un utilitar numit
sshpass.
pentru a alimenta parola în comanda SSH.
LEGATE DE: Cum se creează și instalează cheile SSH din carcasa Linux
Instalarea OpenSSL și SSHPASS
Deoarece o mulțime de alte instrumente de criptare și securitate utilizează openssl, s-ar putea fi deja instalat pe computer. Cu toate acestea, dacă nu este, durează doar un moment de instalat.
Pe Ubuntu, tastați această comandă:
sudo apt obține openssl
A instala
sshpass.
, utilizați această comandă:
sudo apt instalați sshpass
Pe Fedora, trebuie să tastați:
sudo dnf instalare openssl
Comanda de instalare
sshpass.
este:
sudo dnf instalați sshpass
Pe Manjaro Linux, putem instala OpenSSL cu:
sudo pacman -sy openssl
În cele din urmă, pentru a instala
sshpass.
, utilizați această comandă:
Sudo Pacman - SSHPASS
Criptarea pe linia de comandă
Înainte de a intra în utilizarea
OpenSSL.
Comanda cu scripturi, hai să ne familiarizăm cu ea folosindu-l pe linia de comandă. Să spunem că parola pentru contul de pe computerul la distanță este
Rusty! herring.pitshaft
. Vom cripta acea parolă folosind
OpenSSL.
.
Trebuie să furnizăm o parolă de criptare atunci când o facem. Parola de criptare este utilizată în procesele de criptare și decriptare. Există o mulțime de parametri și opțiuni în
OpenSSL.
comanda. Vom arunca o privire la fiecare dintre ele într-un moment.
Echo 'Rusty! Herring.pitshaft "| OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -Iter 100000 -Salt-pass-pass: 'pick.your.password'
Folosim
ecou
Pentru a trimite parola contului de la distanță printr-o țeavă și în
OpenSSL.
comanda.
În
OpenSSL.
Parametrii sunt:
- ENC -AES-256-CBC : Tipul de codare. Folosim. Standard avansat de criptare Cipătorul cheii cu 25 de biți cu lanț de blocuri de cip.
- -MD SHA512. : Tipul mesajului digest (hash). Folosim algoritmul criptografic SHA512.
-
-A
: Aceasta spune
OpenSSL.Pentru a aplica codificarea Base-64 după faza de criptare și înainte de faza de decriptare. - -pbkdf2. : Utilizarea funcției de derivare bazată pe parolă 2 (PBKDF2) face mult mai dificilă pentru un atac de forță brute să reușească să ghicească parola. PBKDF2 necesită multe computere pentru a efectua criptarea. Un atacator ar trebui să reproducă toate aceste computere.
- -Iter 100000. : Setează numărul de calcule pe care PBKDF2 le va utiliza.
- -sare : Utilizarea unei valori de sare aplicate la întâmplare face ca ieșirea criptată să fie diferită de fiecare dată, chiar dacă textul simplu este același.
-
-Pass Pass: "pick.your.password"
: Parola va trebui să utilizăm pentru a decripta parola de la distanță criptată. Substitui
pick.your.password.cu o parolă robustă a alegerii dvs.
Versiunea criptată a noastră
Rusty! herring.pitshaft
Parola este scrisă în fereastra terminalului.
Pentru a decripta acest lucru, trebuie să trecem șir criptat
OpenSSL.
cu aceiași parametri pe care am folosit-o pentru a cripta, dar adăugând în
-D.
(decripta).
ECHO U2FSDGVKX19IIIRNHESG + WM / UKJTZJWNYOPJZPHYRDKYZH5LVZRPIGO1S0GOZU46 | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -Inteir 100000 -Salt-pass-pass: 'pick.your.password'
Șirul este decriptat, iar textul nostru original - parola pentru contul de utilizator la distanță - este scris în fereastra terminalului.
Asta demonstrează că putem cripta în siguranță parola contului de la distanță. De asemenea, putem decripta atunci când avem nevoie de ea folosind parola pe care am furnizat-o în faza de criptare.
Dar acest lucru se îmbunătățește de fapt situația noastră? Dacă avem nevoie de parola de criptare pentru a decripta parola de cont la distanță, cu siguranță parola de decriptare va trebui să fie în script? Da, da. Dar parola de cont de la distanță criptată va fi stocată într-un fișier diferit, ascuns. Permisiunile din fișier vor împiedica pe oricine, dar dvs. - și utilizatorul rădăcină al sistemului, evident - de la accesarea acestuia.
Pentru a trimite ieșirea de la comanda de criptare la un fișier, putem utiliza redirecționarea. Fișierul este numit ".secret_vault.txt". Am schimbat parola de criptare la ceva mai robust.
Echo 'Rusty! Herring.pitshaft "| OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -Iter 100000 -Salt-pass-pass: "Secret # Vault! Parola" & GT; .secret_vault.txt
Nimic vizibil nu se întâmplă, dar parola este criptată și trimisă la fișierul ".secret_vault.txt".
Putem testa faptul că a funcționat prin decriptarea parolei în fișierul ascuns. Rețineți că folosim
pisică
aici, nu
ecou
.
CAT .Secret_vault.txt | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -Iter 100000 -Salt -Pass Pass: "Secret # Vault! Parolă"
Parola este decriptată cu succes din datele din fișier. Bine
utilizare
chmod
Pentru a modifica permisiunile din acest fișier, astfel încât nimeni altcineva să nu-l poată accesa.
CHMOD 600 .Secret_vault.txt
LS -L .Secret_Vault.txt
Folosind o mască de permisiuni de 600 elimină toate accesul pentru oricine altul decât proprietarul fișierului. Acum putem trece la scrierea scenariului nostru.
LEGATE DE: Cum să utilizați comanda chmod pe linux
Folosind openssl într-un script
Scriptul nostru este destul de simplu:
# / bin / bash # Numele contului de la distanță La distanță_user = geek. # parola pentru contul de la distanță La distanță_passwd = $ (Cat .secret_Vault.txt | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -DBKDF2 -Iter 100000 -Salt -Pass Pass: "Secret # Vault! Parola") # computer la distanță Remote_Linux = Fedora-34.Local # Conectați-vă la computerul la distanță și puneți o marcaj de timp într-un fișier numit script.log sshpass -p $ la distanță_passwd ssh -t $ la distanță_user @ $ la distanță_linux & lt; _remote_commands. ECHO $ Utilizator "-" $ (data) & gt; /Home/onmote_user/script.log. _remote_command
-
Am stabilit o variabilă numită
La distanță_user.la "geek". -
Apoi am stabilit o variabilă numită
Remote_passwd.La valoarea parolei decriptate tras din fișierul ".secret_vault.txt", folosind aceeași comandă pe care am folosit o clipă în urmă. -
Localizarea calculatorului la distanță este stocată într-o variabilă numită
Remote_Linux..
Cu aceste informații, putem folosi
ssh.
pentru a vă conecta la computerul la distanță.
-
În
sshpass.comanda este prima comandă de pe linia de conectare. O folosim cu-p.(Parolă) Opțiune. Acest lucru ne permite să specificăm parola care ar trebui trimisă lassh.comanda. -
Noi folosim
-T.(dezactivați alocarea Pseudo-terminal) cussh.Pentru că nu trebuie să avem un pseudo-tty ne-a alocat pe computerul la distanță.
Folosim un scurt
Aici documentul
pentru a trece o comandă la computerul la distanță. Totul între cele două
_remote_commands.
Corzile sunt trimise ca instrucțiuni la sesiunea de utilizator de pe computerul la distanță - în acest caz, este o singură linie de script de bash.
Comanda trimisă la computerul la distanță pur și simplu conectați numele contului de utilizator și o marcaj de timp unui fișier numit "Script.log".
Copiați și lipiți scriptul într-un editor și salvați-l într-un fișier numit "GO-REMOTE.SH." Nu uitați să modificați detaliile pentru a reflecta adresa propriului computer la distanță, contul de utilizator la distanță și parola de cont de la distanță.
Utilizare
chmod
pentru a face executabilul scriptului.
chmod + x go-remote.sh
Tot ce a mai rămas este să-l încerci. Să ne tragem scenariul.
./ go-remote.sh
Deoarece scriptul nostru este un șablon minimalist pentru un scenariu nesupravegheat, nu există nici o ieșire la terminal. Dar dacă verificăm fișierul "script.log" de pe computerul Fedora, putem vedea că conexiunile la distanță au fost făcute cu succes și că fișierul "script.log" a fost actualizat cu TIMERSAMPS.
CAT SCRIPT.LOG
Parola dvs. este privată
Parola de cont de la distanță nu este înregistrată în script.
Și deși parola de decriptare este, În script, nimeni altcineva nu poate accesa fișierul dvs. ".secret_vault.txt" pentru a-l decripta și a prelua parola contului de la distanță.