OpenVPN les passordet ditt fra terminalen, ikke fra stdin
Hvor OpenVPN faktisk leser et passord, hvorfor en fil på stdin feiler, og de tre støttede veiene for skriptet innlogging på Linux og macOS.
OpenVPN ber om et brukernavn og et passord på den kontrollerende terminalen, og en fil som omdirigeres til standard inn, er ikke den terminalen. Den ene detaljen forklarer skriptet som henger med passordet liggende rett der i røret. Ledeteksten tegnes av klienten, og lesingen skjer fra terminalenheten, så omdirigering av stdin endrer ingenting. Fôr klienten gjennom en av de dokumenterte inngangene, og det samme skriptet kobler til på første forsøk.
Tre innganger dekker nesten alle tilfeller, og hver av dem feiler på sin måte. Velg etter ledeteksten klienten faktisk viser, ikke etter hvilket alternativ som er lettest å skripte.
Ledeteksten kommer ikke fra stdin
Når OpenVPN trenger påloggingsinformasjon, åpner det den kontrollerende terminalen og leser der. Derfor ser en interaktiv test fin ut, mens den samme kommandoen under cron eller en unit-fil står stille med ledeteksten skrevet til en logg ingen ser på. Noen bygg faller tilbake til standard inn når det ikke finnes en terminal, og den inkonsistensen er verre enn en hard feil, fordi den skjuler problemet til utrulling.
Undersøk miljøet før du skriver noen kode: kjør klienten under samme bruker, med samme stdin, slik planleggeren eller tjenesteadministratoren vil gjøre. Hvis ledeteksten aldri dukker opp i loggen og prosessen ikke kommer videre, venter noe på en terminal som ikke finnes.
Første inngang: en påloggingsfil med to linjer
Autentiseringsalternativet tar en sti, og filen inneholder nøyaktig to linjer, brukernavn og deretter passord, uten noe annet. Oppgi stien eksplisitt i stedet for å stole på et standardfilnavn, fordi en bortkommen påloggingsfil i arbeidskatalogen er måten feil konto havner i bruk på. Sett modus til 0600 og gi eierskap til kontoen som kjører klienten.
Klienten leser filen én gang ved oppstart, så rotasjon av passordet betyr å starte prosessen på nytt. Det er vanligvis oppførselen du vil ha, og den hører hjemme i runbooken ved siden av rotasjonsprosedyren.
Andre inngang: askpass for nøkkelens passfrase
En passfrasebeskyttet privat nøkkel reiser en andre, annerledes ledetekst, og den har sitt eget filbaserte svar: alternativet askpass leser passfrasen fra første linje i en fil. For SSH-baserte tunneler er motstykket et askpass-program som klienten kjører, og hvis standardutdata blir hemmeligheten.
Ingen av formene setter hemmeligheten i argumentlisten, og begge lar den eksistere som en fil eller som et kjørbart program som skriver den ut. Beskyttelsen er filrettigheter og prosesseierskap, ikke uklarhet. En hjelper som ekkoer en hardkodet streng, er en hemmelighet med ekstra trinn.
Tredje inngang: portalklientens egen CLI
Bedriftsklienter leverer vanligvis et kommandolinjepunkt som kobler til en navngitt portal uten noe vindu, og det er den støttede veien. På Linux eksponerer GlobalProtect-klienten tilkoblings- og sertifikatimportoperasjoner gjennom sin CLI, og portaler som bruker sertifikatautentisering trenger importtrinnet før en automatisert tilkobling kan virke. Foretrekk det framfor syntetiske tastetrykk: du får en ekte utgangsstatus, ingen avhengighet av vindusfokus, og det overlever en låst skjerm.
Hvis den første tilkoblingen fortsatt trenger et menneske til å godta et sertifikat, er automatiseringen ikke ferdig. Gjør importen under oppsettet og registrer den som en forutsetning.
Når flyten trenger en pseudoterminal
En sekvens som ber om et passord og deretter en engangskode, har ingen enkelt fil å lese. En terminaldriver som Expect er riktig verktøy fordi den venter på hvert mønster etter tur, og den trenger prosessen startet før den i det hele tatt kan matche noe.
To feil dominerer. Et skript som venter på en ledetekst uten å starte klienten, venter evig, og Tcl er ikke et skall, så skallaritmetikk skrevet inne i en expect-blokk evalueres ikke slik den leses. Ha feilsøkingsflagget på mens du bygger mønstrene, og slå det av etterpå.
Hemmeligheter som lekker, og hvor de gjemmer seg
Alt som sendes som argument, er synlig i prosesslisten, så påloggingsinformasjon hører i en fil eller bak en hjelper, aldri på kommandolinjen. Engangskoder forbrukes etter design og må produseres for hvert forsøk. Feillogger bærer ofte brukernavnet og iblant mer, så rediger dem før du sender dem noe sted, og hold hemmeligheten utenfor selve profilen, fordi en konfigurasjonsfil med innbygd passord blir limt inn i saker og repositorier. Rotasjon av kontoen betyr da å jakte på hver kopi, og det er nettopp den kostnaden dette oppsettet unngår.
Revider inngangene du valgte, og koble dem deretter til unit-filen eller planleggeren som faktisk skal kjøre klienten. Tunnelen lever nøyaktig så lenge den prosessen lever.