VPN-Tool-Einstellungen: Umgebung beim Start oder Export im Hook?
Ein Hook startet seine eigenen Kindprozesse, nicht die Shell, die Sie bereits geöffnet haben. Eine Umgebung beim Start hält den privaten Endpunkt nur in dem einen Befehl, der sie braucht.
Ein VPN-Hook, der einen API-Endpunkt exportiert, ändert die Umgebung der Prozesse, die er startet, nicht die des Terminals, das beim Hochfahren des Tunnels bereits offen war. Genau diese Unterscheidung erklärt die meisten Meldungen „das Tool ruft weiterhin den öffentlichen Endpunkt auf“. Es gibt zwei brauchbare Orte für die Einstellung, und die Wahl hängt davon ab, wer sie nutzt und wie oft sie sich ändert. Vergleichen Sie beide, bevor Sie ein weiteres Startskript hinzufügen.
Zwei Orte, an denen die Einstellung leben kann
Option eins ist ein Präfix am Befehl selbst: Der Wert existiert für genau diesen einen Aufruf und verschwindet mit ihm. Option zwei ist ein Export innerhalb des Verbindungs-Hooks, der jeden Prozess erreicht, den der Hook danach startet. Sie unterscheiden sich in Reichweite und Lebensdauer, nicht in der Syntax, und dieser Unterschied entscheidet die meisten Fehlschläge.
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
Die Tabelle lässt den Hook günstig aussehen und verbirgt die eigentliche Rechnung: Er wählt auch für Befehle einen privaten Endpunkt, die mit der Aufgabe nichts zu tun haben. Lesen Sie jede Zeile als Einschränkung, nicht als Vorliebe. Ändert sich der Endpunkt pro Aufgabe, gewinnt das Präfix an Präzision, auch wenn es einen Tastendruck kostet.
Warum der Hook eine bereits offene Shell nicht erreicht
Umgebungsvariablen werden einem Prozess übergeben, wenn das Prozessabbild erzeugt wird. Eine Shell, die vor der Verbindung gestartet ist, behält die Kopie, die sie erhalten hat, und ein im Hook ausgeführter Export ist keine Rundsendung an jeden Prozess des Rechners. Nur die eigenen Kindprozesse des Hooks erben ihn. Die eigenen Kindprozesse einer Shell übernehmen, was die Shell im Moment ihres Starts hält, und deshalb kann derselbe Befehl in einem Terminal funktionieren und in einem anderen scheitern.
Dasselbe gilt für einen grafischen Editor. Sein Erweiterungshost, das integrierte Terminal und der Sprachserver im Hintergrund wurden beim Start abgezweigt und halten eigene Kopien. Einen Ordner erneut zu öffnen startet diese Kinder nicht zwangsläufig neu, also kommt die hinzugefügte Einstellung weiterhin nie an.
Der billigste Test ist, die Variable von der Stelle auszugeben, die scheitert, nicht von der Shell, die funktioniert. Wenn der scheiternde Prozess vor dem Tunnel gestartet ist, hatte der Export nie eine Chance.
Die Form pro Befehl, ausgeschrieben
Ein Präfix hält die Wahl im verwendenden Befehl sichtbar, was hilft, wenn sich der Endpunkt zwischen Aufgaben ändert:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Der Befehl ist nur ein Beispiel: my-work-tool ist ein Platzhalter, und INTERNAL_API ist kein VPN-Standard, ersetzen Sie ihn daher durch die dokumentierte Einstellung des Programms, das Sie tatsächlich ausführen, und durch Ihren eigenen freigegebenen Host. Setzen Sie kein Token und kein Passwort in dieselbe Zeile, weil beides in der Shell-Historie landet.
Wenn mehrere Befehle zu einer Aufgabe gehören, setzt ein kurzes, geprüftes Wrapper-Skript die Variablen und startet sie dann. So bleibt eine einzige Definition bestehen, ohne den Wert für jeden künftigen Befehl im Terminal global zu machen.
Neu laden, neu starten oder in Ruhe lassen
Bei einem bereits laufenden Tool bevorzugen Sie dessen eigenes Neuladen oder Arbeitsbereichsprofil, wenn es eines hat. Andernfalls speichern Sie die Arbeit und starten die Komponente neu, die die Einstellung liest, was oft ein Sprachserver und nicht das Editorfenster ist. Das Fenster neu zu starten und anzunehmen, die Kindprozesse seien gefolgt, ist der Grund, warum ein Neuladen so aussieht, als funktioniere es nicht.
Das Trennen ist eine eigene Entscheidung. Pausieren, Schließen oder erneutes Verbinden gehört zur Anwendung, und die Endpunktvariable steuert das nicht. Behandeln Sie die Variable als Konfiguration, die eine Adresse wählt, nicht als Regel darüber, welcher Netzwerkverkehr danach genutzt werden darf, und die beiden Anliegen bleiben trennbar.