Van egy mentett VPN-szolgáltatása a Rendszerbeállításokban, és a terminál segítségével szeretné elindítani. macOS-en a támogatott útvonal a scutil --nc, de csak azoknak a szolgáltatásoknak, amelyek a rendszer saját hálózati kapcsolatkezelőjének tulajdonában vannak. A menüsáv nem az API: a harmadik féltől származó klienseknek általában saját automatizálásuk van, és a felügyeleti szolgáltatás által küldött profil megtagadhatja a helyi indítást. Ez az az ellenőrzőlista, amelyet végigfutok: keresse meg a pontos szolgáltatást, olvassa el az állapotát, indítsa el, várja meg az állapot változását, majd bizonyítsa, hogy a forgalom valóban az alagutat használja. Az első olyan lépésnél álljon meg, amely nem stimmel, mert minden későbbi parancs feltételezi, hogy az előző sikerült.

Keresse meg a szolgáltatást, mielőtt elindítaná

A leltárral kezdje, nem a felidézett profilnévvel:

scutil --nc help
scutil --nc list

Minden sor egy állapotot párosít egy szolgáltatásazonosítóval, egy típussal és egy megjelenített névvel. Az azonosító az az érték, amelyre szkriptelni kell, mert a megjelenített nevek ismétlődnek és szerkeszthetők. Az Apple scutil kézikönyve dokumentálja a hálózati kapcsolat módját, míg a telepített --nc help az adott Mac alparancsainak hiteles listája; ne feltételezze, hogy egy régebbi útmutató kapcsolója még létezik az Ön macOS-verziójában.

Az üres lista eredmény, nem hiba. Egy szállítói kliens vagy felügyeleti profil által létrehozott szolgáltatás lehet aktív, miközben itt láthatatlan, vagy látható olyan típussal, amelyet a natív vezérlő nem tud irányítani. Ebben az esetben használja a szállító eszközét vagy a profil dokumentációját. Párhuzamos natív profil létrehozása csak azért, hogy legyen mit elindítani, rossz üzlet.

Olvassa el a jelenlegi állapotot, és erősítse meg a választót

Kérdezze meg a szolgáltatást indítás előtt, hogy tudja, minek kell megváltoznia egy sikeres indításnál:

scutil --nc status "Office VPN"

Ha két szolgáltatás ugyanazt a megjelenített nevet használja, a név kétértelmű. Adja át inkább az azonosítót; a parancs mindkettőt elfogadja, de csak az azonosító garantálja egyetlen szolgáltatás kiválasztását. Ellenőrizze, hogy az állapotszó ismerős-e — általában Connected, Disconnected, Connecting vagy Disconnecting —, mielőtt szkriptben feldolgozná. Azt is ellenőrizze, hogy a profil felügyelt-e, mert egy zárolt konfiguráció elfogadhatja a parancsot, és mégis figyelmen kívül hagyhatja, vagy megerősítést kérhet.

Ez az állapothívás olcsó, ezért használja őrként az automatizálásban: csak akkor indítson, ha az állapot Disconnected, és ne tekintse a Connecting-et hibának. Ha a szolgáltatás már Connected, hagyja ki az indítást, ahelyett hogy megszakítana egy működő alagutat.

Indítsa el a kapcsolatot, és várja meg az állapot beállását

Az indítási kérés aszinkron. A parancs akkor tér vissza, amikor a kérést elfogadták, nem amikor a hitelesítés befejeződik vagy az útvonalak telepítődnek. Futtassa le, majd kérdezze le az állapotot korlátozott várakozással, és lépjen ki, ha a szolgáltatás visszaesik Disconnected állapotba:

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

A soha fel nem oldódó Connecting állapot általában hitelesítő adatokra, MFA-ra vagy a kiszolgálóra utal, nem a scutil-ra. A parancs nem tud interaktív bejelentkezést biztosítani, ezért a tokent vagy hardverkulcsot váró profil Connecting állapotban marad, és végül visszaesik. Olvassa el az állapotszót, mielőtt újrapróbálkozásokat adna hozzá; a hitelesítési felszólítás elleni hurok nem sikerülhet.

Ne tekintse a héj kilépési állapotát készenlétnek. A hasznos jel az állapotkarakterlánc, amelyet bizonyíték követ arra, hogy az alagút forgalmat szállít. A csendesen visszatérő indítóparancs még mindig hagyhatja Önt egy olyan kapcsolattal, amely soha nem hitelesít.

Bizonyítsa, hogy az alagút forgalmat szállít, nem csak azt mondja, hogy Connected

A Connected a kapcsolatot írja le, nem az útválasztási döntést. A natív PPP- és IKEv2-szolgáltatások ppp vagy utun interfészt hoznak létre és útvonalakat telepítenek, míg az osztott alagút szándékosan érintetlenül hagyja az alapértelmezett útvonalat. Vizsgálja meg az interfészeket és mindkét címcsaládot:

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

Keresse meg a szolgáltatás által létrehozott interfészt, ne találgasson számot, majd kérdezze meg az útválasztási táblától, melyik interfészt használja egy adott cél: route -n get 10.0.0.10, belső hoszttal helyettesítve. Ha a fizikai interfészt jelenti, az alagút fut, de nem szállítja azt a folyamot. Ellenőrizze az osztott alagút útvonalait, a feloldók sorrendjét és minden helyi tűzfal-szabályt, amely engedi az alagút interfészét, de a folyamatot nem.

A névfeloldás a szokásos hamis negatív. A belső nevek a rossz feloldón keresztül oldódhatnak fel, miközben az alagút teljesen egészséges, ami VPN-hibának látszik, és nem az. A scutil --dns mutatja a sorrendet, amelyet a macOS használni fog; feloldóváltás után ürítse a gyorsítótárat a dscacheutil -flushcache és a sudo killall -HUP mDNSResponder parancsokkal.

Tartsa a hitelesítő adatokat és jogosultságokat a parancssoron kívül

Soha ne tegyen jelszót, előre megosztott kulcsot vagy tokent az argumentumokba. Az argumentumok láthatók a folyamatlistákban, és bekerülnek a héj előzményeibe, egy másolt támogatási átirat pedig kiszivárogtathatja őket. A profil saját hitelesítőadat-kezelése — legyen az Keychain-elem, rendszerkérdés vagy az ügyfél hitelesítési folyamata — a titkok helye.

A parancs sudo-val való futtatása nem teszi felügyelet nélkülivé az interaktív bejelentkezést. Az effektív felhasználót változtatja meg, nem a GUI-kérdés, a hardvertoken vagy a bejelentkezési kulcskarikák elérhetőségét. A LaunchAgent a felhasználó bejelentkezése és a kulcskarikák feloldása után indíthat szolgáltatást; a LaunchDaemon általában nem éri el a felhasználói munkamenet ezen részeit. Ha egy szervezet felügyeli a szolgáltatást, annak életciklus-szabályai minden helyi szkripttel szemben érvényesülnek.

Állítsa le a szolgáltatást, és ellenőrizze, hogy leállva maradt

Ugyanazzal a választóval állítsa le, amellyel elindította, majd olvassa vissza az állapotot, ahelyett hogy feltételezné, hogy az alagút eltűnt:

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

A Disconnected állapotba visszatérő leállítás után is marad egy dolog, amit ellenőrizni kell: a profil igény szerinti csatlakozásra van-e állítva, ami a szkriptje nélkül visszahozhatja. Ha egy másik ügyfél útvonalakkal rendelkezik ugyanazon a Macen, azok az útvonalak túlélhetik a natív leállítást. Indítsa újra az útvonal-ellenőrzést, mielőtt arra jutna, hogy a gép a VPN-en kívül van.

A kézzel futtatott burkolóhoz tartsa rögzített sorrendet: lista, állapot, indítás, lekérdezés, útvonal-teszt, leállítás, ellenőrzés. Ne elemezze a barátságos nevet szabad formátumú kimenetből, amikor az azonosító elérhető, és ne tekintse az indítóparancs kilépését készenlétnek. A kapcsolatkezelő állapotot jelent; a bizonyítéka az állapot plusz egy útvonal, amely az alagútra mutat.

Kapcsolódó cikkek