Ein Trennskript scheitert meist aus einem Grund: Es spricht den falschen Besitzer an. Ein Tunnel, der von der OpenVPN-GUI der Community verwaltet wird, gehört zur Sitzung dieser GUI, ein von einem Windows-Dienst gestarteter Tunnel gehört zum Dienst, und OpenVPN Connect gehört zu keinem von beiden. Gehen Sie diese Prüfungen der Reihe nach durch und halten Sie an, wenn der Besitzer unklar ist. Ein Kill-Befehl, weil der Besitzer mehrdeutig war, ist genau der Weg, auf dem aus dem Trennen eines Profils ein Ausfall des ganzen Standorts wird.

Bei einer GUI-verwalteten Verbindung ist der nützliche Befehl eine Nachricht an die GUI, kein Signal an openvpn.exe.

Zuerst den Besitzer ermitteln

Schauen Sie, welches Programm den verbundenen Zustand tatsächlich anzeigt, bevor Sie etwas schreiben. Ein Symbol im Infobereich bedeutet, dass die GUI-Sitzung ihn besitzt. Ein Diensteintrag bedeutet, dass der Dienst ihn besitzt. Ein separates Anwendungsfenster mit eigener Profilliste bedeutet keines von beiden, und es gilt seine eigene versionsspezifische Oberfläche.

Prüfen Sie auch das Konto und die Desktop-Sitzung. Eine geplante Aufgabe, die unter einem anderen Benutzer oder in einer nicht interaktiven Sitzung läuft, sollte nicht als Steuerung der GUI gelten, die eine angemeldete Person sieht. Diese Diskrepanz erzeugt einen Befehl, der sauber endet und nichts ändert, und das ist die teuerste Art von Fehler, die man aus einem Protokoll heraus debuggen kann.

Dann die eigene Trennung des Besitzers senden

Wenn die GUI unter dem Beispielpfad installiert ist und ein Profil namens office existiert, ist der ganze Befehl eine Zeile:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect office

Ersetzen Sie ihn durch Ihren tatsächlichen Installationspfad und den genauen Konfigurationsnamen, einschließlich der Groß- und Kleinschreibung, wie die GUI sie anzeigt. Die Befehlsdokumentation des Projekts listet die unterstützten GUI-Steuerungen auf, und dieses Beispiel gehört allein zur OpenVPN GUI — es ist kein Befehl für jede Anwendung mit OpenVPN im Namen.

Bei einem dienstgesteuerten Tunnel ist die richtige Steuerung der Dienst, nicht die GUI-Binärdatei. Prüfen Sie den installierten Dienst und die von ihm verwalteten Profile, bevor Sie etwas stoppen, denn ein Stopp kann mehrere Tunnel gleichzeitig niederreißen, und Sie erhalten kein Ergebnis pro Profil zurück.

Prüfen, dass nichts anderes ausfällt

Die GUI dokumentiert außerdem einen Befehl disconnect_all, und sein Umfang ist genau der Grund, warum er das falsche Werkzeug für ein Skript ist, das nur office stoppen soll. Wenn Sie in Versuchung geraten, ihn aus Einfachheit zu verwenden, fragen Sie, was auf dieser Maschine sonst noch verbunden ist und wie der Benutzer es bemerken würde.

taskkill /F /IM openvpn.exe ist auf zwei Arten schlechter. Es wählt Prozesse nach dem Namen der ausführbaren Datei aus und erzwingt die Beendigung, drückt also weder einen Profilnamen noch die normale Trennsequenz des Besitzers aus. Das einen sauberen Shutdown zu nennen, versteckt beide Probleme hinter einem einzigen Exit-Status.

Welchen Weg Sie auch wählen, prüfen Sie die Tragweite vor der Änderung: Listen Sie die verbundenen Profile auf, notieren Sie, welche überleben sollen, und prüfen Sie sie danach erneut.

Den Zustand bestätigen, nicht den Exit-Code

Lesen Sie nach der Trennungsanforderung den Zustand der benannten Verbindung über ihren Besitzer, statt dem Rückgabewert des Befehls zu vertrauen. Wenn der nächste Schritt nach dem Abbau das Netzwerk braucht, warten Sie mit einem ausdrücklichen Timeout auf diese Zustandsänderung, statt anzunehmen, die Bereinigung sei fertig, sobald der Prozess zurückkehrt. Ein Skript, das dem Abbau davonläuft, wird unregelmäßig scheitern, und das VPN bekommt die Schuld.

Ändert sich der Zustand nie, ist der Besitzer wahrscheinlich nicht der, den Sie angesprochen haben. Prüfen Sie Sitzung und Konto erneut, bevor Sie zu einem stärkeren Befehl greifen.

Was ins Protokoll gehört

Protokollieren Sie den Profilnamen, den angesprochenen Besitzer und den Startkontext sowie den resultierenden Zustand. Schütten Sie nicht die vollständige Konfiguration oder Anmeldedaten ins Aufgabenprotokoll, und protokollieren Sie die Befehlszeile nicht, wenn sie einen Pfad zu einer Datei mit Geheimnissen enthält.

Eine Fehlermeldung, die das Profil und den Kontext nennt, genügt, damit die nächste Person das Problem nachstellen kann. Ein Protokoll, das nur einen allgemeinen Exit-Code festhält, schickt sie zurück an den Anfang, und genau dort beginnt das Raten wieder.

Ähnliche Artikel