Keni një shërbim VPN të ruajtur në Cilësimet e Sistemit dhe dëshironi që terminali ta nisë atë. Në macOS rruga e mbështetur është scutil --nc, por vetëm për shërbimet që zotërohen nga vetë menaxheri i lidhjeve të rrjetit të sistemit. Shiriti i menysë nuk është API: klientët e palëve të treta zakonisht kanë automatizimin e tyre, dhe një profil i shtyrë nga një shërbim menaxhimi mund të refuzojë një nisje lokale. Kjo është lista e kontrollit që ndjek: gjeni shërbimin e saktë, lexoni gjendjen e tij, niseni atë, prisni që gjendja të ndryshojë dhe më pas provoni se trafiku përdor vërtet tunelin. Ndaleni në hapin e parë që nuk përputhet, sepse çdo komandë e mëvonshme supozon se e mëparshmja pati sukses.

Gjeni shërbimin përpara se të provoni ta nisni

Filloni me inventarin, jo me emrin e profilit që mbani mend:

scutil --nc help
scutil --nc list

Çdo rresht çifton një gjendje me një identifikues shërbimi, një lloj dhe një emër shfaqjeje. Identifikuesi është vlera mbi të cilën shkruhen skriptet, sepse emrat e shfaqjes përsëriten dhe mund të redaktohen. Manuali scutil i Apple dokumenton modalitetin e lidhjes së rrjetit, ndërsa --nc help i instaluar është lista autoritative e nënkomandave në atë Mac; mos supozoni se një flamur nga një udhëzues më i vjetër ekziston ende në versionin tuaj të macOS.

Një listë e zbrazët është rezultat, jo gabim. Një shërbim i krijuar nga një klient furnizuesi ose një profil menaxhimi mund të jetë aktiv ndërsa është i padukshëm këtu, ose i dukshëm me një lloj që kontrolluesi amë nuk mund ta drejtojë. Në atë rast, përdorni mjetin e furnizuesit ose dokumentacionin e profilit. Krijimi i një profili amë paralel vetëm për të pasur diçka për të nisur është një marrëveshje e keqe.

Lexoni gjendjen aktuale dhe konfirmoni përzgjedhësin

Pyetni shërbimin për gjendjen përpara se ta nisni, që të dini çfarë duhet të ndryshojë një nisje e suksesshme:

scutil --nc status "Office VPN"

Nëse dy shërbime ndajnë një emër shfaqjeje, emri është i paqartë. Kalo identifikuesin në vend të tij; komanda pranon të dyja, por vetëm identifikuesi garanton zgjedhjen e një shërbimi. Përpara se ta analizoni në një skript, kontrolloni se fjala e gjendjes është një që e njihni — zakonisht Connected, Disconnected, Connecting ose Disconnecting. Kontrolloni gjithashtu nëse profili menaxhohet, sepse një konfigurim i kyçur mund ta pranojë komandën dhe përsëri ta injorojë atë ose të kërkojë konfirmim.

Ky thirrje gjendjeje është i lirë, prandaj përdoreni si roje në automatizim: nisni vetëm kur gjendja është Disconnected dhe mos e trajtoni Connecting si dështim. Nëse shërbimi është tashmë Connected, kaloni nisjen në vend që të ndërprisni një tunel që funksionon.

Nisni lidhjen dhe prisni që gjendja të stabilizohet

Kërkesa e nisjes është asinkrone. Komanda kthehet kur kërkesa pranohet, jo kur përfundon vërtetimi ose instalohen rrugët. Ekzekutoni atë, pastaj sondoni gjendjen me një pritje të kufizuar dhe dilni nëse shërbimi kthehet në 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

Një gjendje Connecting që nuk zgjidhet kurrë zakonisht tregon kredenciale, MFA ose serverin, jo scutil. Komanda nuk mund të ofrojë një hyrje interaktive, kështu që një profil që pret një token ose një çelës hardueri do të mbetet në Connecting dhe përfundimisht do të tërhiqet. Lexoni fjalën e gjendjes përpara se të shtoni përpjekje të reja; një lak kundër një kërkese vërtetimi nuk mund të ketë sukses.

Mos e trajtoni statusin e daljes së shell-it si gatishmëri. Sinjali i dobishëm është vargu i gjendjes, i ndjekur nga prova se tuneli mbart trafik. Një komandë nisjeje që kthehet në heshtje mund t’ju lërë ende me një lidhje që nuk vërtetohet kurrë.

Provoni se tuneli mbart trafik, jo vetëm se thotë Connected

Connected përshkruan lidhjen, jo vendimin e rrugëtimit. Shërbimet amë PPP dhe IKEv2 krijojnë një ndërfaqe ppp ose utun dhe instalojnë rrugë, ndërsa një tunel i ndarë e lë qëllimisht rrugën e parazgjedhur të paprekur. Inspektoni ndërfaqet dhe të dyja familjet e adresave:

ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns

Gjeni ndërfaqen që krijoi shërbimi në vend që të hamendësoni një numër, pastaj pyetni tabelën e rrugëtimit se cilën ndërfaqe përdor një destinacion i caktuar: route -n get 10.0.0.10, duke e zëvendësuar me një host të brendshëm. Nëse raporton ndërfaqen fizike, tuneli është aktiv por nuk e mbart atë rrjedhë. Kontrolloni rrugët e tunelit të ndarë, rendin e zgjidhësve dhe çdo rregull lokal të firewall-it që lejon ndërfaqen e tunelit por jo procesin.

Zgjidhja e emrave është negativi i rremë i zakonshëm. Emrat e brendshëm mund të zgjidhen përmes zgjidhësit të gabuar ndërsa tuneli është plotësisht i shëndetshëm, gjë që duket si defekt VPN dhe nuk është. scutil --dns tregon rendin që macOS do të përdorë; pas një ndryshimi zgjidhësi, pastroni cache-in me dscacheutil -flushcache dhe sudo killall -HUP mDNSResponder.

Mbani kredencialet dhe privilegjet jashtë rreshtit të komandës

Kurrë mos vendosni një fjalëkalim, një çelës të ndarë paraprakisht ose një token në argumente. Argumentet janë të dukshme në listat e proceseve dhe përfundojnë në historinë e shell-it, dhe një transkript mbështetjeje i kopjuar mund t’i zbulojë ato. Trajtimi i kredencialeve nga vetë profili — qoftë një artikull Keychain, një kërkesë sistemi ose rrjedha e vërtetimit të klientit — është vendi për sekretet.

Ekzekutimi i komandës me sudo nuk e bën një hyrje interaktive të pambikëqyrur. Ai ndryshon përdoruesin efektiv, jo disponueshmërinë e një kërkese GUI, të një token hardueri ose të Keychain-it të hyrjes. Një LaunchAgent mund të nisë një shërbim pasi përdoruesi të jetë futur dhe Keychain-i të jetë shkyçur; një LaunchDaemon zakonisht nuk arrin ato pjesë të sesionit të përdoruesit. Nëse një organizatë e menaxhon shërbimin, rregullat e saj të ciklit të jetës mbizotërojnë mbi çdo skript lokal.

Ndaloni shërbimin dhe verifikoni se mbeti i ndaluar

Ndaloni me të njëjtin përzgjedhës që përdorët për nisjen, pastaj lexoni përsëri gjendjen në vend që të supozoni se tuneli u zhduk:

scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"

Një ndalim që kthehet në Disconnected lë ende një gjë për të verifikuar: nëse profili është vendosur të lidhet sipas kërkesës, gjë që mund ta kthejë atë pa skriptin tuaj. Nëse një klient tjetër zotëron rrugë në të njëjtin Mac, ato rrugë mund t’i mbijetojnë një ndalimi amë. Rikontrolloni rrugën përpara se të konkludoni se makina është jashtë VPN-së.

Për një mbështjellës që ekzekutoni me dorë, mbani rendin fiks: listë, gjendje, nisje, sondim, test rruge, ndalim, verifikim. Mos e analizoni emrin miqësor nga një dalje me format të lirë kur identifikuesi është i disponueshëm, dhe mos e trajtoni daljen e komandës së nisjes si gatishmëri. Menaxheri i lidhjeve raporton gjendjen; prova juaj është gjendja plus një rrugë që tregon drejt tunelit.

Artikuj të ngjashëm