Cài đặt công cụ VPN: môi trường lúc khởi chạy hay xuất trong hook?
Một hook khởi chạy các tiến trình con của chính nó, không phải shell bạn đã mở. Môi trường lúc khởi chạy giữ điểm cuối riêng tư chỉ trên một lệnh duy nhất cần đến nó.
Một hook VPN xuất điểm cuối API sẽ thay đổi môi trường của các tiến trình mà nó khởi chạy, không phải của terminal đã mở sẵn khi đường hầm được dựng lên. Chính sự khác biệt duy nhất đó giải thích phần lớn các báo cáo «công cụ vẫn gọi điểm cuối công khai». Có hai nơi khả thi để đặt cài đặt này, và lựa chọn phụ thuộc vào ai dùng nó và nó thay đổi thường xuyên đến đâu. Hãy so sánh cả hai trước khi thêm một script khởi động khác.
Hai nơi cài đặt có thể sống
Lựa chọn thứ nhất là một tiền tố trên chính lệnh: giá trị chỉ tồn tại cho lần gọi đó và biến mất cùng nó. Lựa chọn thứ hai là một lần xuất bên trong hook kết nối, tới được mọi tiến trình mà hook khởi chạy sau thời điểm đó. Chúng khác nhau ở phạm vi và vòng đời, không phải ở cú pháp, và chính sự khác biệt đó quyết định phần lớn các lỗi.
| 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 |
Bảng này làm hook trông rẻ và che giấu hóa đơn thật: nó cũng chọn điểm cuối riêng tư cho những lệnh không liên quan gì đến công việc. Hãy đọc từng dòng như một ràng buộc, không phải một sở thích. Nếu điểm cuối thay đổi theo từng công việc, tiền tố thắng về độ chính xác dù tốn một lần nhấn phím.
Vì sao hook không thể chạm tới một shell đã mở
Các biến môi trường được trao cho tiến trình khi ảnh tiến trình được tạo. Một shell khởi động trước khi kết nối vẫn giữ bản sao mà nó nhận được, và một lần xuất thực hiện trong hook không phải là phát sóng tới mọi tiến trình trên máy. Chỉ các tiến trình con của chính hook mới thừa hưởng nó. Các tiến trình con của shell nhận lấy những gì shell nắm giữ vào lúc chúng khởi động, và đó là lý do cùng một lệnh có thể chạy được trong terminal này mà hỏng trong terminal khác.
Điều tương tự áp dụng cho trình soạn thảo đồ họa. Máy chủ tiện ích mở rộng, terminal tích hợp và máy chủ ngôn ngữ nền của nó được tách nhánh lúc khởi chạy và giữ bản sao riêng. Mở lại thư mục không nhất thiết khởi động lại các tiến trình con đó, nên cài đặt bạn thêm vào vẫn không bao giờ đến nơi.
Phép thử rẻ nhất là in biến ra từ nơi thất bại, không phải từ shell đang chạy tốt. Nếu tiến trình thất bại khởi động trước đường hầm, lần xuất đó chưa từng có cơ hội.
Dạng theo từng lệnh, viết ra
Một tiền tố giữ lựa chọn hiển thị ngay trong lệnh dùng nó, điều này hữu ích khi điểm cuối thay đổi giữa các công việc:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Lệnh này chỉ là ví dụ: my-work-tool là một chỗ giữ chỗ và INTERNAL_API không phải tiêu chuẩn của VPN, nên hãy thay bằng cài đặt được ghi trong tài liệu của chương trình bạn thực sự chạy và máy chủ đã được phê duyệt của bạn. Đừng đặt token hay mật khẩu trên cùng dòng, vì chúng sẽ nằm trong lịch sử của shell.
Khi nhiều lệnh thuộc một công việc, một script bao bọc ngắn đã được rà soát sẽ đặt các biến rồi khởi chạy chúng. Cách này giữ một định nghĩa duy nhất mà không biến giá trị thành toàn cục cho mọi lệnh tương lai trong terminal.
Tải lại, khởi động lại hoặc để yên
Với một công cụ đang chạy, hãy ưu tiên lần tải lại hoặc hồ sơ không gian làm việc của chính nó nếu có. Nếu không, hãy lưu việc đang làm và khởi động lại thành phần đọc cài đặt, thường là máy chủ ngôn ngữ chứ không phải cửa sổ soạn thảo. Khởi động lại cửa sổ và cho rằng các tiến trình con đã đi theo chính là lý do một lần tải lại trông như không hoạt động.
Ngắt kết nối là một quyết định riêng. Tạm dừng, đóng hoặc kết nối lại thuộc về ứng dụng, và biến điểm cuối không điều khiển việc đó. Hãy coi biến là cấu hình chọn một địa chỉ, không phải quy tắc về lưu lượng mạng nào được dùng sau đó, và hai vấn đề vẫn tách rời được.