Sie schreiben ein Skript, das scutil --nc start mit dem Verbindungsnamen ausführt, es funktioniert auf Ihrem Mac, und es scheitert auf jedem frisch installierten Rechner im Büro. Das Skript ist nicht kaputt. Es wird um etwas gebeten, das es nie konnte: Eine bestehende Verbindung zu starten ist nicht derselbe Vorgang wie eine neue anzulegen.

Einrichtung und Sitzungssteuerung sind zwei Aufgaben mit zwei Verantwortlichen, und ein Workflow, der das Gegenteil annimmt, besteht jeden Test auf dem Rechner, auf dem er geschrieben wurde.

Mit wem der Startbefehl tatsächlich spricht

Ein Sitzungssteuerungsbefehl spricht eine Konfiguration an, die bereits existiert und bereits genehmigt ist. Er bittet das System, diese benannte Verbindung hochzufahren, mit den Servereinstellungen, Identitätsreferenzen und der Richtlinie, die früher gespeichert wurden. Wurden diese nie installiert, gibt es nichts zu starten.

Deshalb zeigt sich der Fehler auf neuer Hardware und nicht auf dem Laptop des Administrators. Der Laptop wurde vor Monaten von einer Person eingerichtet, die das inzwischen vergessen hat. Denken Sie an den Startbefehl wie an eine Türklingel, die jemand im letzten Quartal verkabelt hat. Sie zu drücken ist nicht dasselbe wie die Verkabelung zu verlegen.

Drei Verantwortliche einer VPN-Konfiguration

Ein organisationsverwaltetes Profil kommt aus der Geräteverwaltung. Das Profil trägt die Serveradressen, die Authentifizierungsregelung und die Richtlinie, die die Organisation verlangt, und der VPN-Administrator ist die Person, die sie liefert. Ein Skript sollte diese Einstellungen nicht aus einem Anzeigenamen rekonstruieren, den es in einer Liste gefunden hat.

Eine native persönliche VPN-Konfiguration wird über Apples Network Extension API erstellt, die die eingebauten Protokolle IPsec und IKEv2 abdeckt. Das ist eine Anwendungsschnittstelle mit einem Speicherschritt und einer Benutzergenehmigung, kein Shell-Befehl, der still jeden Tunneltyp anlegt, den ein Anbieter ausliefert.

Ein Client eines Drittanbieters ist ein dritter Fall mit eigenem Importformat, eigenem Verwaltungswerkzeug und oft eigenem privilegierten Helfer. Seine Sitzung gehört dem Prozess dieses Anbieters. Einen ähnlich genannten Systemdienst zu finden ist kein Beweis dafür, dass ein Systembefehl den Tunnel steuert, und diese Annahme erzeugt Skripte, die zu funktionieren scheinen, bis der Anbieter den Client aktualisiert.

Native Einrichtung hat ein Speichern und eine Genehmigung

Apples Modell lautet laden, ändern, speichern. Eine Anwendung lädt die vorhandenen Einstellungen vor ihrem ersten Speichern nach dem Start, ändert die Konfiguration und speichert sie dann. Das Speichern meldet einen Fehler, wenn es nicht persistieren kann, und dieses Ergebnis zu ignorieren macht aus einem Einrichtungsfehler drei Schritte später einen Verbindungsfehler.

Das erste Speichern verlangt außerdem, dass der Benutzer die Anwendung genehmigt. Das ist eine bewusste Sicherheitsgrenze, und sie bedeutet, dass der erste Lauf auf einem neuen Mac interaktiv ist, selbst wenn jedes spätere Verbinden und Trennen automatisiert werden kann. Planen Sie den ersten Lauf als menschliche Aufgabe mit anwesendem Menschen. Automatisieren Sie den zweiten Lauf an aufwärts, und schreiben Sie das ins Runbook, damit niemand das Unmögliche verspricht. Ein Bereitstellungsplan, der einen vollständig unbeaufsichtigten ersten Lauf verspricht, verspricht etwas, das die Plattform nicht bietet.

Apple empfiehlt außerdem, die Serverkompatibilität mit einem Konfigurationsprofil zu prüfen, bevor man sich auf die API verlässt. Diese Prüfung zuerst zu machen trennt «der Server akzeptiert diesen Client nicht» von «der Client hat die Einstellungen nie gespeichert», was verschiedene Tickets für verschiedene Teams sind.

Was ein wiederholbarer Startbefehl annehmen darf

Nach der Einrichtung kann ein Skript sicher die bestehende Verbindung ansprechen, über die Schnittstelle ihres Eigentümers. Geben Sie ihm die stabile Identität der Verbindung plus die gewünschte Aktion, und sonst nichts. Es sollte keinen geratenen Einstellungspfad lesen und nicht annehmen, der im Menü gezeigte Name sei systemweit eindeutig.

Für native Verbindungen ist eine benannte Sitzungsanforderung wie scutil --nc start ein Steuerungsvorgang. Er installiert keine Servereinstellungen, importiert keine Anmeldedaten und führt keine Autorisierung des ersten Speicherns durch. Behandeln Sie ihn als letzten Schritt einer Kette, nie als die ganze Kette.

Halten Sie Geheimnisse aus Kommandozeilenargumenten und aus gewöhnlicher Diagnoseausgabe heraus. Welchen Identitätsmechanismus die Bereitstellung auch gewählt hat, auf ihn soll sich der Startbefehl verlassen, und ein in die Shell-Historie eingefügtes Passwort ist ein Befund in jeder Prüfung.

Zwei Abnahmeprüfungen

Die erste Prüfung ist die Einrichtung: Nehmen Sie einen frisch installierten Mac und belegen Sie, dass die Konfiguration vorhanden ist, dem richtigen Verwalter gehört und vollständig genehmigt ist. Tun Sie das vor dem Konnektivitätstest, denn ein Verbindungstest auf einem nicht eingerichteten Rechner beweist nichts über das Skript.

Die zweite Prüfung ist die Sitzung: verbinden, die autorisierte Ressource erreichen und sauber trennen. Jeder Fehler hat jetzt einen Verantwortlichen, und das ist der praktische Nutzen der Trennung beider Aufgaben. Ein fehlendes Profil ist ein Auslieferungsproblem, ein Speicherfehler ein Genehmigungsproblem, eine abgelehnte Anmeldung ein Authentifizierungsproblem, und ein Timeout nach erfolgreichem Start ist die Sitzungsschicht. Keiner davon ist «das Skript ist kaputt».

Ähnliche Artikel