Start ein lagra Mac-VPN frå terminalen med scutil --nc
Bruk scutil --nc til å starte, granske og stoppe ein lagra macOS VPN-teneste, hald innloggingsdata utanfor argv, og prov at trafikken faktisk brukar tunnelen.
Du har ein lagra VPN-teneste i Systeminnstillingar, og du vil at terminalen skal starte henne. På macOS er den støtta vegen scutil --nc, men berre for tenester som systemet sin eigen nettverkssambandshandsamar eig. Menylinja er ikkje API-et: tredjepartsklientar har vanlegvis si eiga automatisering, og ein profil som blir skyvd ut av ein administrasjonsteneste kan nekte ein lokal start. Dette er sjekklista eg køyrer: finn den nøyaktige tenesta, les tilstanden, start henne, vent på at tilstanden endrar seg, og prov deretter at trafikken faktisk brukar tunnelen. Stopp ved det første trinnet som ikkje stemmer, fordi kvar seinare kommando føreset at den førre lukkast.
Finn tenesta før du prøver å starte henne
Byrja med oversikta i staden for profilnamnet du hugsar:
scutil --nc help
scutil --nc list
Kvar linje parar ein status med ein tenesteidentifikator, ein type og eit visingsnamn. Identifikatoren er verdien du skriv skript mot, fordi visingsnamn går att og kan redigerast. Apple si scutil-handbok dokumenterer nettverkssambandsmodusen, medan den installerte --nc help er den autoritative lista over underkommandoar på den Macen; ikkje gå ut frå at eit flagg frå ei eldre rettleiding framleis finst i macOS-versjonen din.
Ei tom liste er eit resultat, ikkje ein feil. Ei teneste oppretta av ein leverandørklient eller ein administrasjonsprofil kan vere aktiv medan ho er usynleg her, eller synleg med ein type som den innebygde kontrolløren ikkje kan styre. I så fall brukar du verktøyet til leverandøren eller profildokumentasjonen. Å opprette ein parallell innebygd profil berre for å ha noko å starte er ein dårleg handel.
Les gjeldande tilstand og stadfest veljaren
Spør tenesta om tilstand før du startar henne, slik at du veit kva ein vellukka start skal endre:
scutil --nc status "Office VPN"
Viss to tenester deler eit visingsnamn, er namnet tvitydig. Send identifikatoren i staden; kommandoen godtek begge, men berre identifikatoren er garantert å velje éi teneste. Kontroller at tilstandsordet er eit du kjenner — vanlegvis Connected, Disconnected, Connecting eller Disconnecting — før du parsar det i eit skript. Kontroller òg om profilen blir administrert, fordi ein låst konfigurasjon kan godta kommandoen og likevel ignorere han eller spørje om stadfesting.
Dette tilstandsvarselet er billeg, så bruk det som vakt i automatisering: start berre når statusen er Disconnected, og handsam ikkje Connecting som ein feil. Viss tenesta allereie er Connected, hopp over starten i staden for å avbryte ein fungerande tunnel.
Start sambandet og vent på at tilstanden stabiliserer seg
Startførespurnaden er asynkron. Kommandoen kjem tilbake når førespurnaden er godteken, ikkje når autentiseringa er ferdig eller rutene er installerte. Køyr han, og gransk deretter tilstanden med avgrensa venting, og avbryt viss tenesta fell tilbake til Disconnected:
scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
state=$(scutil --nc status "Office VPN" | head -n 1)
[ "$state" = "Connected" ] && break
[ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
sleep 2
n=$((n + 1))
done
Ein Connecting-status som aldri blir løyst, peikar vanlegvis på innloggingsdata, MFA eller serveren, ikkje på scutil. Kommandoen kan ikkje levere ei interaktiv innlogging, så ein profil som ventar eit token eller ei maskinvarebrikke, blir ståande i Connecting og fell til slutt tilbake. Les tilstandsordet før du legg til nye forsøk; ei løkke mot ein autentiseringsførespurnad kan ikkje lukkast.
Ikkje handsam utgangsstatusen til skalet som beredskap. Det nyttige signalet er tilstandsstrengen, etterfølgd av prov på at tunnelen ber trafikk. Ein startkommando som kjem stille tilbake, kan framleis etterlate deg med eit samband som aldri blir autentisert.
Prov at tunnelen ber trafikk, ikkje berre at han seier Connected
Connected skildrar sambandet, ikkje rutingsavgjerda. Innebygde PPP- og IKEv2-tenester opprettar eit ppp- eller utun-grensesnitt og installerer ruter, medan ein delt tunnel med vilje lèt standardruta vere. Gransk grensesnitta og begge adressefamiliane:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Finn grensesnittet tenesta oppretta i staden for å gjette eit nummer, og spør deretter rutetabellen kva grensesnitt ein bestemd destinasjon brukar: route -n get 10.0.0.10, med ein intern vert i staden. Viss han rapporterer det fysiske grensesnittet, er tunnelen oppe, men ber ikkje den straumen. Kontroller delte tunnelruter, resolverrekkjefølgje og kvar lokal brannmurregel som tillèt tunnelgrensesnittet men ikkje prosessen.
Namneoppslag er den vanlege falske negativen. Interne namn kan løysast gjennom feil resolver medan tunnelen er heilt sunn, noko som ser ut som ein VPN-feil og ikkje er det. scutil --dns viser rekkjefølgja macOS vil bruke; etter ei resolverendring, tøm bufferen med dscacheutil -flushcache og sudo killall -HUP mDNSResponder.
Hald innloggingsdata og privilegium utanfor kommandolinja
Legg aldri inn eit passord, ein førehandsdelt nøkkel eller eit token i argumenta. Argument er synlege i prosesslister og hamnar i skalhistoria, og ein kopiert støtteutskrift kan leke dei. Profilen si eiga handsaming av innloggingsdata — anten det er eit Keychain-element, ein systemførespurnad eller autentiseringsflyten til klienten — er staden for løyndomar.
Å køyre kommandoen med sudo gjer ikkje ei interaktiv innlogging ubetent. Det endrar den effektive brukaren, ikkje tilgjenge til ein GUI-førespurnad, ei maskinvarebrikke eller innloggingsnøkkelringen. Ein LaunchAgent kan starte ei teneste etter at brukaren har logga inn og nøkkelringen er låst opp; ein LaunchDaemon når vanlegvis ikkje desse delane av brukarsesjonen. Viss ein organisasjon administrerer tenesta, vinn livssyklusreglane hans over kvar lokal skript.
Stopp tenesta og stadfest at ho vart verande stoppa
Stopp med den same veljaren du brukte til å starte, og les deretter tilstanden på nytt i staden for å gå ut frå at tunnelen er borte:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Ein stopp som går tilbake til Disconnected, etterlèt likevel éin ting å kontrollere: om profilen er stilt inn til å kople til ved behov, noko som kan bringe han tilbake utan skriptet ditt. Viss ein annan klient eig ruter på same Mac, kan desse rutene overleve ein innebygd stopp. Køyr rutekontrollen på nytt før du konkluderer med at maskinen er utanfor VPN-en.
For ei innpakning du køyrer manuelt, hald rekkjefølgja fast: liste, status, start, gransking, rutetest, stopp, stadfesting. Ikkje pars det venlege namnet ut av fri form når identifikatoren er tilgjengeleg, og handsam ikkje utgangen til startkommandoen som beredskap. Tilkoplingshandsamaren rapporterer tilstand; provet ditt er tilstanden pluss ei rute som peikar på tunnelen.