Hvis du er tvunget til at bruge et Linux-script til at oprette forbindelse til en adgangskodebeskyttet ressource, føler du dig sandsynligvis urolig for at sætte adgangskoden i scriptet. OpenSSL løser det problem for dig.
Adgangskoder og scripts.
Det er ikke en god ide at sætte adgangskoder i shell scripts. Faktisk er det en virkelig dårlig ide. Hvis scriptet falder ind i de forkerte hænder, kan alle, der læser det, se, hvad adgangskoden er. Men hvis du er tvunget til at bruge et script, hvad mere kan du gøre?
Du kan indtaste adgangskoden manuelt, når processen når det punkt, men hvis scriptet skal løbe uden opsyn, vil det ikke fungere. Heldigvis er der et alternativ til hard-kodning af adgangskoderne i scriptet. Modknyttet bruger det en anden adgangskode til at opnå dette sammen med en stærk kryptering.
I vores eksempel scenario skal vi lave en fjernforbindelse til en Fedora Linux-computer fra vores Ubuntu-computer. Vi bruger et bash shell script til at lave en SSH-forbindelse til Fedora-computeren. Scriptet skal køre uden opsyn, og vi vil ikke sætte adgangskoden til den eksterne konto i scriptet. Vi kan ikke bruge SSH-nøgler i dette tilfælde, fordi vi foregiver, at vi ikke har nogen kontrol- eller adminrettigheder over Fedora-computeren.
Vi skal gøre brug af den velkendte
OpenSSL Toolkit.
At håndtere kryptering og et værktøj kaldet
sshpass.
at fodre adgangskoden til kommandoen SSH.
RELATEREDE: Sådan oprettes og installerer SSH-nøgler fra Linux Shell
Installation af OpenSSL og SSHPass
Fordi en masse andre krypterings- og sikkerhedsværktøjer bruger OpenSSL, kan det allerede være installeret på din computer. Men hvis det ikke er, tager det kun et øjeblik at installere.
På Ubuntu skal du skrive denne kommando:
SUDO APT GET OPENSSL
At installere
sshpass.
, brug denne kommando:
sudo apt installer sshpass
På Fedora skal du skrive:
sudo DNF installer OpenSSL
Kommandoen til at installere
sshpass.
er:
sudo dnf installer sshpass
På Manjaro Linux kan vi installere OpenSSL med:
Sudo Pacman -SY OPENSSL
Endelig at installere
sshpass.
, brug denne kommando:
sudo pacman-system sshpass
Krypter på kommandolinjen
Før vi kommer ind i at bruge
OpenSSL.
Kommando med scripts, lad os blive bekendt med det ved at bruge det på kommandolinjen. Lad os sige, at adgangskoden til kontoen på fjerncomputeren er
Rusty! Herring.PitShaft.
. Vi skal kryptere det pågældende kodeord ved hjælp af
OpenSSL.
.
Vi skal levere en krypteringsadgangskode, når vi gør det. Krypteringsadgangskoden bruges i krypterings- og dekrypteringsprocesserne. Der er mange parametre og muligheder i
OpenSSL.
kommando. Vi tager et kig på hvert af dem i et øjeblik.
ECHO 'Rusty! Herring.PitShaft' | OpenSSL Enc -aes-256-CBC -MD SHA512 -A -PBKDF2 -ER 100000 -Salt-pass-pass: 'Pick.your.Password'
Vi bruger
ekko
At sende den eksterne kontoadgangskode gennem et rør og ind i
OpenSSL.
kommando.
Det
OpenSSL.
Parametre er:
- Enc -aes-256-CBC : Kodningstypen. Vi bruger Avanceret kryptering Standard 256-bit nøglecipher med cipher-blokkæde.
- -MD SHA512. : Message Digest (Hash) type. Vi bruger Sha512 kryptografisk algoritme.
-
-en
: Dette fortæller
OpenSSL.at anvende base-64 kodning efter krypteringsfasen og før dekrypteringsfasen. - -pBKDF2. : Brug af adgangskodebaseret nøgleafledningsfunktion 2 (PBKDF2) gør det meget vanskeligere for et brutal Force-angreb at lykkes i at gætte dit kodeord. PBKDF2 kræver, at mange beregninger udfører kryptering. En angriber ville skulle replikere alle disse beregninger.
- -Der 100000. : Indstiller antallet af beregninger, som PBKDF2 vil bruge.
- -salt : Ved hjælp af en tilfældigt påført saltværdi gør den krypterede udgang forskellig hver gang, selvom den almindelige tekst er den samme.
-
-pass Pass: 'Pick.your.Password'
: Adgangskoden skal vi bruge til at dekryptere den krypterede fjernadgangskode. Erstatning
Pick.your.password.med et robust adgangskode til din valg.
Den krypterede version af vores
Rusty! Herring.PitShaft.
Adgangskoden er skrevet til terminalvinduet.
For at dekryptere dette skal vi passere den krypterede streng i
OpenSSL.
med de samme parametre, som vi plejede at kryptere, men tilføjer i
-d.
(dekryptere) mulighed.
ECHO U2FSDGVKX19IIIRNESG + WM / UKJTZJWNYOPJZPHYRDKYZH5LVZRPIGO1S0GOZU46 | OPENSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -ER 100000 -Salt-pass-pass: 'Pick.your.Password'
Strengen er dekrypteret, og vores originale tekst-adgangskoden til den eksterne brugerkonto-er skrevet til terminalvinduet.
Det viser, at vi sikkert kan kryptere vores fjerntliggende brugerkontoadgangskode. Vi kan også dekryptere det, når vi har brug for det ved hjælp af det kodeord, vi leverede i krypteringsfasen.
Men forbedrer dette faktisk vores situation? Hvis vi har brug for krypteringsadgangskoden til at dekryptere fjernkontoadgangskoden, skal Dekrypteringsadgangskoden sikkert være i scriptet? Nå, ja det gør det. Men den krypterede fjerntliggende brugerkontoadgangskode gemmes i en anden, skjult fil. Tilladelserne på filen forhindrer nogen, men du-og systemets rodbruger, selvfølgelig - at få adgang til det.
For at sende udgangen fra krypteringskommandoen til en fil, kan vi bruge omdirigering. Filen hedder ".secret_vault.txt." Vi har ændret krypteringsadgangskoden til noget mere robust.
ECHO 'Rusty! Herring.PitShaft' | OPENSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 -ER 100000 -SAlt-pass-pass: 'Secret # Vault! Adgangskode' & GT; .secret_vault.txt
Intet synligt sker, men adgangskoden er krypteret og sendt til filen ".secret_vault.txt".
Vi kan teste, at det fungerede ved at dekryptere adgangskoden i den skjulte fil. Bemærk, at vi bruger
kat
her, ikke.
ekko
.
CAT .SECRET_VAULT.TXT | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -ER 100000 -Salt-pass-pass: 'Secret # Vault! Adgangskode'
Adgangskoden dekrypteres med succes fra dataene i filen. Godt
brug
chmod.
For at ændre tilladelserne på denne fil, så ingen andre kan få adgang til det.
CHMOD 600 .Secret_Vault.txt
LS -L .Secret_Vault.txt
Brug af en tilladelsesmaske på 600 fjerner al adgang for andre end filen. Vi kan nu gå videre til at skrive vores script.
RELATEREDE: Sådan bruges CHMOD-kommandoen på Linux
Ved hjælp af OpenSSL i et script
Vores script er ret ligetil:
#! / Bin / bash # Navn på den eksterne konto REMOTE_USER = GEEK # Adgangskode til den eksterne konto REMOTE_PASSWD = $ (CAT .SECRET_VAULT.TXT | OPENSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -ER 100000 -Salt-Pass Pass: 'Secret # Vault! Adgangskode') # fjern computer REMOTE_LINUX = FEDORA-34.LOCAL # Tilslut til den eksterne computer og læg en tidsstempel i en fil kaldet script.log sshpass -P $ remote_passwd ssh-$ remote_user @ $ remote_linux & lt; & lt; _remote_commands. ekko $ bruger "-" $ (dato) & gt; & gt; /home/$remote_user/script.log. _remote_commands
-
Vi sætter en variabel kaldet
REMOTE_USER.til "geek." -
Vi sætter derefter en variabel kaldet
REMOTE_PASSWD.til værdien af den dekrypterede adgangskode trukket fra filen ".secret_vault.txt", ved hjælp af den samme kommando, som vi brugte et øjeblik siden. -
Placeringen af den eksterne computer er gemt i en variabel kaldet
REMOTE_LINUX..
Med disse oplysninger kan vi bruge
ssh.
kommando for at oprette forbindelse til fjerncomputeren.
-
Det
sshpass.Kommando er den første kommando på forbindelseslinjen. Vi bruger det med-P.(adgangskode) mulighed. Dette gør det muligt for os at angive det kodeord, der skal sendes tilssh.kommando. -
Vi bruger
-T.(Deaktiver Pseudo-terminal tildeling) Mulighed medssh.Fordi vi ikke behøver at have en pseudo-tty tildelt til os på den eksterne computer.
Vi bruger en kort
her Dokument.
at bestå en kommando til den eksterne computer. Alt mellem de to
_remote_commands.
Strenge sendes som instruktioner til brugersessionen på den eksterne computer - i dette tilfælde er det en enkelt linje af bash script.
Kommandoen sendt til fjerncomputeren logger blot på brugerkontonnavnet og en tidsstempel til en fil kaldet "Script.log."
Kopier og indsæt scriptet til en editor og gem det til en fil kaldet "go-remote.sh." Husk at ændre detaljerne for at afspejle adressen på din egen fjernbetjening, fjernbrugerkonto og ekstern kontoadgangskode.
Brug
chmod.
at gøre scriptet eksekverbar.
chmod + x go-remote.sh
Alt, hvad der er tilbage, er at prøve det ud. Lad os slukke vores script.
./ GO-REMOTE.SH
Fordi vores script er en minimalistisk skabelon til et uovervåget script, er der ingen udgang til terminalen. Men hvis vi kontrollerer "script.log" -filen på Fedora-computeren, kan vi se, at fjernforbindelser er blevet foretaget, og at filen "Script.log" er blevet opdateret med tidsstempler.
Cat Script.Log
Dit kodeord er privat
Din fjerntliggende kontoadgangskode ikke optages i scriptet.
Og selvom dekrypteringsadgangskoden er, I scriptet kan ingen andre få adgang til din ".secret_vault.txt" -fil for at dekryptere den og hente den eksterne kontoadgangskode.