Налаштування інструмента VPN: оточення під час запуску чи експорт у хуку?
Хук запускає власні дочірні процеси, а не оболонку, яку ви вже відкрили. Оточення під час запуску тримає приватну кінцеву точку лише в тій єдиній команді, якій вона потрібна.
VPN-хук, що експортує кінцеву точку API, змінює оточення процесів, які він запускає, а не того термінала, який уже був відкритий, коли тунель піднявся. Саме ця єдина відмінність пояснює більшість повідомлень «інструмент досі звертається до публічної кінцевої точки». Є два робочі місця для налаштування, і вибір залежить від того, хто його використовує і як часто воно змінюється. Порівняйте їх, перш ніж додавати ще один стартовий скрипт.
Два місця, де налаштування може жити
Перший варіант — префікс у самій команді: значення існує лише для цього одного виклику і зникає разом із ним. Другий — експорт усередині хука підключення, який досягає кожного процесу, запущеного хуком після цього моменту. Вони різняться охопленням і часом життя, а не синтаксисом, і саме ця різниця вирішує більшість збоїв.
| 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 |
Таблиця робить хук дешевим на вигляд і приховує справжній рахунок: він вибирає приватну кінцеву точку й для команд, що не мають жодного стосунку до завдання. Читайте кожен рядок як обмеження, а не як перевагу. Якщо кінцева точка змінюється від завдання до завдання, префікс виграє в точності, навіть якщо коштує одного натискання клавіші.
Чому хук не може дістатися до вже відкритої оболонки
Змінні оточення передаються процесу під час створення образу процесу. Оболонка, запущена до підключення, зберігає отриману копію, а експорт, виконаний усередині хука, не є широкомовною розсилкою всім процесам машини. Його успадковують лише власні дочірні процеси хука. Дочірні процеси оболонки беруть те, що оболонка тримає в момент їх запуску, і тому та сама команда може працювати в одному терміналі й не працювати в іншому.
Те саме стосується графічного редактора. Його хост розширень, вбудований термінал і фоновий мовний сервер відгалузилися під час запуску й тримають власні копії. Повторне відкриття папки не обов'язково перезапускає ці дочірні процеси, тож додане налаштування так і не доходить.
Найдешевший тест — вивести змінну з того місця, де стався збій, а не з оболонки, яка працює. Якщо збійний процес запустився до тунелю, експорт не мав жодного шансу.
Форма для окремої команди, виписана
Префікс залишає вибір видимим у тій команді, яка його використовує, і це допомагає, коли кінцева точка змінюється між завданнями:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Команда наведена лише для прикладу: my-work-tool — це заповнювач, а INTERNAL_API не є стандартом VPN, тому підставте документоване налаштування програми, яку ви справді запускаєте, і свій затверджений хост. Не розміщуйте токен або пароль у тому самому рядку, бо вони потрапляють в історію оболонки.
Коли кілька команд належать до одного завдання, короткий перевірений скрипт-обгортка задає змінні, а потім запускає їх. Так залишається єдине визначення, і значення не стає глобальним для кожної майбутньої команди в терміналі.
Перезавантажте, перезапустіть або залиште як є
Для вже запущеного інструмента віддавайте перевагу його власному перезавантаженню або профілю робочої області, якщо він є. Інакше збережіть роботу й перезапустіть компонент, що читає налаштування, а це часто мовний сервер, а не вікно редактора. Перезапуск вікна з припущенням, що дочірні процеси пішли за ним, — це саме те, через що перезавантаження виглядає неробочим.
Відключення — окреме рішення. Пауза, закриття або повторне підключення належать застосунку, і змінна кінцевої точки ними не керує. Ставтеся до змінної як до конфігурації, що вибирає адресу, а не як до правила про те, який мережевий трафік можна використовувати згодом, і ці дві справи залишаються роздільними.