OpenVPN frågar efter ett användarnamn och ett lösenord på den styrande terminalen, och en fil som omdirigeras till standard in är inte den terminalen. Den enda detaljen förklarar skriptet som hänger medan lösenordet ligger där i röret. Prompten ritas av klienten och läsningen sker från terminalenheten, så omdirigering av stdin ändrar ingenting. Mata klienten genom en av dess dokumenterade ingångar och samma skript ansluter på första försöket.

Tre ingångar täcker nästan varje fall, och var och en misslyckas på sitt sätt. Välj efter den prompt klienten faktiskt visar, inte efter vilket alternativ som är lättast att skripta.

Prompten kommer inte från stdin

När OpenVPN behöver inloggningsuppgifter öppnar det den styrande terminalen och läser där. Därför ser ett interaktivt test bra ut, medan samma kommando under cron eller en unit-fil står stilla med prompten skriven till en logg ingen tittar på. Vissa byggen faller tillbaka på standard in när ingen terminal finns, och den inkonsekvensen är värre än ett hårt fel, eftersom den döljer problemet till driftsättningen.

Undersök miljön innan du skriver någon kod: kör klienten under samma användare, med samma stdin, som schemaläggaren eller tjänstehanteraren kommer att göra. Om prompten aldrig dyker upp i loggen och processen inte kommer vidare, väntar något på en terminal som inte finns.

Första ingången: en inloggningsfil med två rader

Autentiseringsalternativet tar en sökväg, och filen innehåller exakt två rader, användarnamn och sedan lösenord, utan något annat. Ange sökvägen uttryckligen i stället för att lita på ett standardfilnamn, eftersom en borttappad inloggningsfil i arbetskatalogen är hur fel konto hamnar i bruk. Sätt läget till 0600 och ge ägarskapet till kontot som kör klienten.

Klienten läser filen en gång vid start, så rotation av lösenordet innebär att processen startas om. Det är oftast det beteende du vill ha, och det hör hemma i runbooken bredvid rotationsproceduren.

Andra ingången: askpass för nyckelns lösenfras

En lösenfrasskyddad privat nyckel reser en andra, annan prompt, och den har sitt eget filbaserade svar: alternativet askpass läser frasen från första raden i en fil. För SSH-baserade tunnlar är motsvarigheten ett askpass-program som klienten kör, och vars standardutdata blir hemligheten.

Ingen av formerna sätter hemligheten i argumentlistan, och båda låter den finnas som en fil eller som ett körbart program som skriver ut den. Skyddet är filrättigheter och processägarskap, inte otydlighet. En hjälpare som ekar en hårdkodad sträng är en hemlighet med extra steg.

Tredje ingången: portalklientens egen CLI

Företagsklienter levererar vanligtvis en kommandoradsstartpunkt som ansluter till en namngiven portal utan något fönster, och det är den stödda vägen. På Linux exponerar GlobalProtect-klienten anslutnings- och certifikatimportoperationer via sitt CLI, och portaler som använder certifikatautentisering behöver importsteget innan en automatiserad anslutning kan fungera. Föredra det framför syntetiska tangenttryckningar: du får en riktig slutstatus, inget beroende av fönsterfokus, och det överlever en låst skärm.

Om den första anslutningen fortfarande kräver en människa för att acceptera ett certifikat är automatiseringen inte klar. Gör importen under installationen och registrera den som en förutsättning.

När flödet behöver en pseudoterminal

En sekvens som frågar efter ett lösenord och sedan en engångskod har ingen enda fil att läsa. En terminaldrivrutin som Expect är rätt verktyg eftersom den väntar på varje mönster i tur och ordning, och den behöver processen startad innan den alls kan matcha något.

Två fel dominerar. Ett skript som väntar på en prompt utan att starta klienten väntar för evigt, och Tcl är inte ett skal, så skalaritmetik skriven inuti ett expect-block utvärderas inte som den läses. Håll felsökningsflaggan på medan du bygger mönstren och slå sedan av den.

Hemligheter som läcker, och var de gömmer sig

Allt som skickas som argument syns i processlistan, så inloggningsuppgifter hör i en fil eller bakom en hjälpare, aldrig på kommandoraden. Engångskoder förbrukas enligt design och måste skapas för varje försök. Felloggar bär ofta användarnamnet och ibland mer, så redigera dem innan du skickar dem någonstans, och håll hemligheten utanför själva profilen, eftersom en konfigurationsfil med inbäddat lösenord klistras in i ärenden och repositorier. Rotation av kontot betyder då att jaga varje kopia, och det är precis den kostnaden som den här uppställningen undviker.

Granska ingångarna du valde och koppla dem sedan till unit-filen eller schemaläggaren som faktiskt kommer att köra klienten. Tunneln lever exakt så länge som den processen lever.

Relaterade artiklar