Om du är tvungen att använda en Linux-skript för att ansluta till en lösenordsskyddad resurs, du förmodligen känner obehag om att sätta det lösenordet i skriptet. OpenSSL löser det problem för dig.
Lösenord och skript
Det är inte en bra idé att sätta lösenord i skalskript. I själva verket är det en riktigt dålig idé. Om skriptet hamnar i orätta händer, kan alla som läser det se vad lösenordet är. Men om du är tvungen att använda ett manus, vad kan man göra?
Du kan ange lösenordet manuellt när processen når den punkten, men om manuset kommer att köra obevakad, som inte kommer att fungera. Lyckligtvis finns det ett alternativ till hårdkoda lösenorden i skriptet. Counterintuitively använder den ett annat lösenord för att uppnå detta, tillsammans med några starka kryptering.
I vårt exempel scenario måste vi göra en fjärranslutning till en Fedora Linux-dator från vår Ubuntu dator. Vi kommer att använda en Bash script för att göra en SSH anslutning till Fedora dator. Skriptet måste köra obevakad, och vi vill inte sätta lösenordet för fjärrkonto i skriptet. Vi kan inte använda SSH-nycklar i det här fallet, eftersom vi låtsas att vi inte har någon kontroll eller admin rättigheter över Fedora dator.
Vi kommer att använda sig av den välkända
OpenSSL Toolkit
att hantera kryptering och ett verktyg som heter
sist
att mata in lösenordet i kommando SSH.
RELATERAD: Så här skapar du och installerar SSH-nycklar från Linux-skalet
Installera OpenSSL och sshpass
Eftersom en hel del andra krypterings- och säkerhetsverktyg använder OpenSSL, kan det redan vara installerat på din dator. Men om det inte är, det tar bara ett ögonblick att installera.
På Ubuntu, skriver detta kommando:
sudo apt get openssl
Att installera
sist
Använd detta kommando:
sudo apt installera sshpass
På Fedora måste du skriva:
sudo DNF installera openssl
Kommandot för att installera
sist
är:
sudo DNF installera sshpass
På Manjaro Linux, kan vi installera OpenSSL med:
sudo pacman -Sy openssl
Slutligen, för att installera
sist
Använd detta kommando:
sudo pacman -Sy sshpass
Kryptera på kommandoraden
Innan vi går in med hjälp av
openssl
kommando med manus, låt oss bekanta sig med det genom att använda den på kommandoraden. Låt oss säga att lösenordet för kontot på fjärrdatorn är
rostig! sill.pitshaft
. Vi kommer att kryptera att lösenordet med
openssl
.
Vi måste ge ett krypterings lösenord när vi gör. Krypterings lösenord används i kryptering och dekryptering processer. Det finns en hel del parametrar och optioner i
openssl
kommando. Vi tar en titt på var och en av dem i ett ögonblick.
Echo 'Rusty! Herring.Pitshaft' | openssl enc -aes-256-cbc -MD sha512 -a -pbkdf2 -iter 100 tusen -salt -pass pass: 'pick.your.password'
Vi använder
eko
att skicka fjärrkonto lösenord genom ett rör och in i
openssl
kommando.
De
openssl
parametrar är:
- enc -aes-256-cbc : Typ kodning. Vi använder Avancerad krypterings standard 256-bitars nyckel chiffer med chiffer-Block Chaining.
- -MD sha512 : Meddelandet digest (hash) typ. Vi använder SHA512 krypteringsalgoritm.
-
-a
: Detta visar
opensslatt applicera base-64-kodning efter krypteringsfasen och före dekryptering fasen. - -pbkdf2 : Använda lösenordsbaserade Key Härledning Funktion 2 (PBKDF2) gör det mycket svårare för en brute force-attack för att lyckas i gissa lösenord. PBKDF2 kräver många beräkningar för att utföra krypteringen. En angripare skulle behöva replikera alla dessa beräkningar.
- -iter 100 tusen : Ställer in antalet beräkningar som PBKDF2 kommer att använda.
- -salt : Att använda ett slumpmässigt applicerat saltvärde gör den krypterade utgången annorlunda varje gång, även om den vanliga texten är densamma.
-
-Pass Pass: "pick.your.password"
: Lösenordet vi behöver använda för att dekryptera det krypterade fjärrlösenordet. Ersättning
pick.your.passwordmed ett robust lösenord för ditt val.
Den krypterade versionen av vår
rostig! sill.pitshaft
Lösenordet är skrivet till terminalfönstret.
För att dekryptera detta måste vi passera den krypterade strängen till
openssl
med samma parametrar som vi brukade kryptera, men lägga till i
-d
(dekryptera) alternativet.
ECHO U2FSDGVKX19IIIRNHESG + WM / UKJTZJWNYOPJZPHYRDYKYZH5LVZRPIGO1S0GOZU46 | OPENSSL ENC-SE-256-CBC-MD SHA512 -A -D -PBKDF2 -ITER 100000 -SALT-PASS PASS: "PICK.YOUR.PASSWORD"
Strängen är dekrypterad, och vår ursprungliga text - lösenordet för fjärrkontoten är skrivet till terminalfönstret.
Det visar sig att vi säkert kan kryptera vårt lösenord för fjärrkontot. Vi kan också dekryptera det när vi behöver det med det lösenord som vi tillhandahållit i krypteringsfasen.
Men förbättrar detta faktiskt vår situation? Om vi behöver krypteringslösenordet för att dekryptera lösenordet för fjärrkontot, måste säkert dekrypteringslösenordet vara i skriptet? Jo, det gör det. Men det krypterade fjärrkontotens lösenord kommer att lagras i en annan dold fil. Tillstånd på filen kommer att förhindra någon, men du - och systemets root-användare, självklart - från att komma åt den.
För att skicka utmatningen från krypteringskommandot till en fil kan vi använda omdirigering. Filen heter ".Secret_vault.txt." Vi har ändrat krypteringslösenordet till något mer robust.
Echo 'Rusty! Herring.Pitshaft' | OPENSSL ENC-SE-256-CBC-MD SHA512 -A -PBKDF2 -ITER 100000 -SALT-Pass Pass: 'Secret # Vault! Lösenord' & GT; .Secret_vault.txt
Inget synligt händer, men lösenordet är krypterat och skickat till filen ".Secret_vault.txt".
Vi kan testa att det fungerade genom att dekryptera lösenordet i den dolda filen. Observera att vi använder
katt
här, inte
eko
.
Cat .Secret_vault.txt | OPENSSL ENC-SE-256-CBC-MD SHA512 -A -D -PBKDF2 -ITER 100000 -SALT-PASS PASS: 'Secret # Vault! Lösenord'
Lösenordet är framgångsrikt dekrypterat från data i filen. Väl
använda sig av
chmod
För att ändra behörigheterna på den här filen så att ingen annan kan komma åt den.
chmod 600 .Secret_vault.txt
ls -l .Secret_vault.txt
Använda en behörighetsmask på 600 tar bort all åtkomst för någon annan än filägaren. Vi kan nu gå vidare för att skriva vårt skript.
RELATERAD: Så här använder du CHMOD-kommandot på Linux
Använda OPENSSL i ett skript
Vårt skript är ganska enkelt:
#! / Bin / bash # namn på fjärrkontot Remote_User = Geek # Lösenord för fjärrkontot REMOTE_PASSWD = $ (CAT .SECRET_VAULT.TXT | OPENSSL ENC -AES-256-CBC-MD SHA512 -A -D -PBKDF2 -iter 100000 -SALT-Pass Pass: 'Secret # Vault! Lösenord') # fjärrdator REMOTE_LINUX = FEDORA-34.LOCAL # Anslut till fjärrdatorn och sätt en tidstämpel i en fil som heter script.log SSHPASS -P $ REMOTE_PASSWD SSH -T $ REMOTE_USER @ $ REMOTE_LINUX & LT; & LT; _remote_commands echo $ user "-" $ (datum) & gt; & gt; /home/$remote_user/script.log _remote_commands
-
Vi sätter en variabel som heter
REMOTE_USERtill "geek". -
Vi ställer sedan en variabel som heter
REMOTE_PASSWDTill värdet av det dekrypterade lösenordet drogs från filen ".Secret_vault.txt", med samma kommando som vi använde för en stund sedan. -
Platsen för fjärrdatorn lagras i en variabel som heter
REMOTE_LINUX.
Med den informationen kan vi använda
ssh
kommandot att ansluta till fjärrdatorn.
-
De
sistkommandot är det första kommandot på anslutningslinjen. Vi använder det med-p(Lösenord) Alternativ. Detta låter oss ange lösenordet som ska skickas tillsshkommando. -
Vi använder
-T(Inaktivera pseudo-terminal tilldelning) alternativ medsshEftersom vi inte behöver ha en pseudo-tty allokerad till oss på fjärrdatorn.
Vi använder en kort
här dokument
att skicka ett kommando till fjärrdatorn. Allt mellan de två
_remote_commands
Strängar skickas som instruktioner till användarsessionen på fjärrdatorn - i det här fallet är det en enda rad av bash-skript.
Kommandot som skickas till fjärrdatorn loggar helt enkelt användarkontonamnet och en tidsstämpel till en fil som heter "Script.log."
Kopiera och klistra in skriptet i en redaktör och spara den till en fil som heter "go-remote.sh." Kom ihåg att ändra detaljerna för att återspegla adressen till din egen fjärrdator, fjärrkonto och lösenord för fjärrkontot.
Använda sig av
chmod
för att göra skriptet körbart.
Chmod + x go-remote.sh
Allt som är kvar är att prova det. Låt oss skjuta upp vårt skript.
./ go-remote.sh
Eftersom vårt skript är en minimalistisk mall för ett obevakat skript, finns det ingen utgång till terminalen. Men om vi kontrollerar filen "script.log" på Fedora-datorn kan vi se att fjärranslutningar har gjorts och att filen "script.log" har uppdaterats med tidsstämplar.
Cat Script.log
Ditt lösenord är privat
Ditt fjärrkonto lösenord spelas inte in i skriptet.
Och även om dekrypteringslösenordet är, I skriptet kan ingen annan komma åt din ".Secret_vault.txt" -fil för att dekryptera det och hämta fjärrkontotens lösenord.