OpenVPN beder om et brugernavn og en adgangskode på den styrende terminal, og en fil, der omdirigeres til standardinddata, er ikke den terminal. Den ene detalje forklarer det script, der hænger, mens adgangskoden ligger lige der i røret. Prompten tegnes af klienten, og læsningen sker fra terminalenheden, så omdirigering af stdin ændrer intet. Fød klienten gennem en af dens dokumenterede indgange, og det samme script forbinder i første forsøg.

Tre indgange dækker næsten alle tilfælde, og hver især fejler på sin egen måde. Vælg efter den prompt, klienten faktisk viser, ikke efter hvilken indstilling der er nemmest at scripte.

Prompten kommer ikke fra stdin

Når OpenVPN har brug for legitimationsoplysninger, åbner den den styrende terminal og læser der. Derfor ser en interaktiv test fin ud, mens den samme kommando under cron eller en unit-fil står stille med prompten skrevet til en log, ingen kigger på. Nogle builds falder tilbage til standardinddata, når der ikke findes en terminal, og den uoverensstemmelse er værre end en hård fejl, fordi den skjuler problemet indtil udrulning.

Undersøg miljøet, før du skriver nogen kode: kør klienten under den samme bruger, med den samme stdin, som planlæggeren eller serviceadministratoren vil gøre. Hvis prompten aldrig vises i loggen, og processen ikke gør fremskridt, venter noget på en terminal, der ikke findes.

Indgang et: en legitimationsfil med to linjer

Autentificeringsindstillingen tager en sti, og filen indeholder præcis to linjer, brugernavn og derefter adgangskode, uden andet. Angiv stien eksplicit i stedet for at stole på et standardfilnavn, fordi en vildfaren legitimationsfil i arbejdsbiblioteket er måden, den forkerte konto ender i brug. Sæt tilstanden til 0600, og giv ejerskabet til den konto, der kører klienten.

Klienten læser den fil én gang ved opstart, så rotation af adgangskoden betyder genstart af processen. Det er normalt den adfærd, du ønsker, og den hører i runbooken ved siden af rotationsproceduren.

Indgang to: askpass til nøglens adgangssætning

En adgangssætningsbeskyttet privat nøgle rejser en anden, forskellig prompt, og den har sit eget filbaserede svar: indstillingen askpass læser adgangssætningen fra første linje i en fil. For SSH-baserede tunneller er ækvivalenten et askpass-program, som klienten eksekverer, og hvis standardoutput bliver hemmeligheden.

Ingen af formerne sætter hemmeligheden i argumentlisten, og begge lader den eksistere som en fil eller som en eksekverbar fil, der udskriver den. Beskyttelsen er filrettigheder og procesejerskab, ikke ukendthed. En hjælper, der ekkoer en hårdkodet streng, er en hemmelighed med ekstra trin.

Indgang tre: portalklientens egen CLI

Virksomhedsklienter leverer normalt et kommandolinjeindgangspunkt, der forbinder til en navngivet portal uden noget vindue, og det er den understøttede vej. På Linux eksponerer GlobalProtect-klienten forbindelses- og certifikatimportoperationer gennem sin CLI, og portaler, der bruger certifikatautentificering, har brug for importtrinnet, før en automatiseret forbindelse kan virke. Foretræk det frem for syntetiske tastetryk: du får en rigtig exitstatus, ingen afhængighed af vinduesfokus, og det overlever en låst skærm.

Hvis den første forbindelse stadig kræver et menneske til at acceptere et certifikat, er automatiseringen ikke færdig. Udfør importen under opsætningen, og registrer den som en forudsætning.

Når flowet kræver en pseudo-terminal

En sekvens, der beder om en adgangskode og derefter en engangskode, har ingen enkelt fil at læse. En terminaldriver som Expect er det rigtige værktøj, fordi den venter på hvert mønster efter tur, og den har brug for, at processen er startet, før den overhovedet kan matche noget.

To fejl dominerer. Et script, der venter på en prompt uden at starte klienten, venter for evigt, og Tcl er ikke et shell, så shell-aritmetik skrevet inde i en expect-blok evalueres ikke, som den læses. Hold fejlretningsflaget tændt, mens du bygger mønstrene, og slå det så fra.

Hemmeligheder, der lækker, og hvor de skjuler sig

Alt, der sendes som argument, er synligt i proceslisten, så legitimationsoplysninger hører i en fil eller bag en hjælper, aldrig på kommandolinjen. Engangskoder forbruges efter design og skal fremstilles for hvert forsøg. Fejllogs bærer ofte brugernavnet og nogle gange mere, så rediger dem, før du sender dem nogen steder hen, og hold hemmeligheden ude af selve profilen, fordi en konfigurationsfil med en indlejret adgangskode bliver klistret ind i tickets og repositories. Rotation af kontoen betyder så at jage hver kopi, og det er netop den pris, dette layout undgår.

Revider de indgange, du valgte, og tilslut dem derefter til den unit-fil eller planlægger, der faktisk skal køre klienten. Tunnellen lever præcis så længe som den proces.

Relaterede artikler