OpenConnect na interactieve login op de achtergrond laten draaien
Rond de login in de voorgrond af en geef de tunnel daarna door aan de eigen achtergrondmodus van de client. De controles die hem vindbaar en stopbaar houden.
Je rondt de MFA-prompt af, de tunnel komt op en het sluiten van de terminal neemt de verbinding mee. Dat is een toezichtprobleem, geen authenticatieprobleem, en OpenConnect heeft al de schakelaar die het oplost. De oplossing is de client naar de achtergrond te laten aftakken zodra het opstarten klaar is, wanneer het interactieve deel echt voorbij is. Hierna volgt een reeks controles: werk ze in volgorde af en stop bij de eerste die niet geldt voor jouw gateway.
Bevestig wat de gateway bij het inloggen eist
Voordat je een commando typt, noteer je het credentialpad dat de uitrol afdwingt. Alleen certificaat, wachtwoord plus token en een browserronde via een SAML-provider gedragen zich anders, en de achtergrondmodus kan geen ervan overslaan. De optie verandert wat er na het opstarten gebeurt, nooit wat er tijdens gebeurt.
De verleidelijke omweg is de prompt automatiseren. Een wrapper die een vast antwoord typt zodra hij een wachtwoordprompt herkent, breekt op het moment dat de gateway om een eenmalige code vraagt, en laat een credential achter in een bestand dat andere accounts kunnen lezen. Als een mens de sessie moet goedkeuren, houd de mens dan in het proces.
Voer de eerste sessie in de voorgrond uit en lees de uitvoer
Verbind één keer normaal en laat de hele handshake printen. Noteer het gebruikte protocol, het certificaat- of tokenpad, het tunneladres dat de server toewijst en elke waarschuwing voordat de verbinding wordt geaccepteerd. Dat transcript is je basislijn en de enige goedkope manier om later een clientprobleem van een gatewaywijziging te onderscheiden. Bewaar het buiten de terminalbuffer.
Herhaal daarna dezelfde aanroep met achtergrondmodus en een toegevoegd PID-bestand, bijvoorbeeld openconnect --background --pid-file /run/openconnect.pid vpn.example.net, en houd de protocol- en authenticatieopties die je gateway vereist op dezelfde regel. De OpenConnect-handleiding beschrijft die optie als doorgaan op de achtergrond nadat het opstarten is voltooid, en daarom moet de interactieve fase eerst klaar zijn.
Maak het draaiende proces vindbaar en stopbaar
Een PID-bestand is alleen bewijs zolang het bij een levend proces past. Zet het in een map die eigendom is van het serviceaccount en vergelijk het genoteerde nummer met de procestabel voordat je iets signaleert. Herstarts en crashes laten het bestand achter, en een verouderd bestand is de gebruikelijke reden dat een stopscript succes meldt terwijl de tunnel nog draait. Behandel de controle als onderdeel van de stopprocedure, niet als optionele stap.
Signaleer de geverifieerde PID en bevestig daarna dat de tunnelinterface echt verdwenen is in plaats van op de exitstatus te vertrouwen. Als de client verhoogde rechten nodig heeft om de interface te configureren, moet het signaal van een account komen dat het mag sturen.
Stapel de achtergrondmodus niet onder een supervisor
systemd en vergelijkbare supervisors verwachten het gestarte proces te bezitten, waardoor een client die wegtapt hen in de war brengt. De supervisor ziet een launcher stoppen terwijl de echte verbinding blijft leven, dus herstartlogica, statusrapportage en stoptime-outs beschrijven iets dat niet meer waar is. Schrijf de unit in de ondersteunde voorgrondopstelling en laat de supervisor het daemonwerk doen.
Bewaar --background voor sessies die iemand start en daarna wegloopt. Als de eis een tunnel is die bestaat voordat iemand inlogt, ontbreekt een goedgekeurde niet-interactieve identiteit plus een plan om die te vernieuwen, en geen commandoregeloptie levert een van beide. De optie aan een bootscript toevoegen levert een tunnel die stil faalt bij de eerste verlopen credential.
Behandel de sessiecookie als een credential
OpenConnect documenteert een aparte authenticatiefase via --authenticate, en het resulterende materiaal kan met --cookie-on-stdin worden teruggegeven. Dat paar bestaat voor integratiewerk, en wat het oplevert is net zo gevoelig als het wachtwoord dat het maakte.
Houd de waarde buiten de shellgeschiedenis, buiten logs en buiten elk ticket dat je opent. Een overdrachtscript moet ook de geverifieerde eindpuntinformatie bewaren die de client samen met de cookie ontving; raak je die kwijt, dan kan een latere run verbinden met een host die je nooit hebt geauthenticeerd, wat erger is dan een verbinding die gewoon faalt.
Werk de lijst af voordat je de terminal sluit
Vier dingen moeten waar zijn: de interactieve login is in de voorgrond afgerond, het PID-bestand wijst naar een proces dat je hebt geverifieerd, de supervisorvraag is in de ene of andere richting beslecht en de cookie heeft een opslagplan dat geen gewoon tekstbestand is. Als alle vier kloppen, is weglopen van de terminal veilig en blijft de tunnel draaien.
Als een ervan faalt, los dat punt op voordat je de andere aanraakt, want de resterende controles kunnen het niet compenseren. Bewaar ook het voorgrondtranscript van je eerste run: de volgende keer dat de tunnel zonder waarschuwing wegvalt, is die basislijn wat een wijziging aan de gatewaykant van een aan de clientkant scheidt.