Ba câu hỏi quyết định điều này, và chỉ ba. Ứng dụng có tạo mục kết nối trong hệ điều hành tồn tại qua lần khởi động lại không? Nó có cung cấp dòng lệnh có thể lấy bí mật từ nơi khác ngoài danh sách đối số của chính nó không? Yêu cầu danh tính của nó có buộc con người trả lời lời nhắc của trình duyệt không? Trả lời theo thứ tự đó và lựa chọn không còn là chuyện sở thích, vì một công việc được lên lịch chỉ có thể không cần người trực đúng như câu trả lời yếu nhất trong ba câu cho phép.

Ghép ứng dụng với ba tầng có thể viết script

Hồ sơ gốc của hệ điều hành, CLI của nhà cung cấp, ứng dụng chỉ có GUI và ứng dụng có SSO trình duyệt cần bốn cách tiếp cận khác nhau. Hai loại đầu sống sót qua các lần khởi động lại không giám sát, và khởi động lại không giám sát chính là toàn bộ vấn đề. Hai loại còn lại cần một quyết định thiết kế trước khi cần script.

What the client exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale and DPI break the click targets

Con đường một: hệ điều hành đã sở hữu hồ sơ

Đây là con đường rẻ nhất và là con đường nhiều người bỏ qua. Trên Windows, rasdial "Office" kết nối và rasdial "Office" /disconnect đóng nó lại; rasphone -d "Office" điều khiển cùng mục đó qua giao diện quay số. macOS liệt kê các dịch vụ đã lưu bằng scutil --nc list và khởi động một dịch vụ bằng scutil --nc start. Linux giao việc cho NetworkManager.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

Các giao diện này chỉ biết hồ sơ do hệ điều hành sở hữu, nên chúng không thể điều khiển một ứng dụng bên thứ ba tùy ý. Khi thiếu hồ sơ, hãy tạo một lần và để script kiểm tra nó thay vì tạo lại mỗi lần chạy. Làm script thành idempotent: đọc trạng thái hiện tại, chỉ kết nối khi đang ngắt kết nối, rồi kiểm tra tên riêng mà công việc thực sự cần.

Con đường hai: nhà cung cấp có dòng lệnh

Một số ứng dụng cung cấp đủ dòng lệnh để bọc lại: Cisco AnyConnect đã có trợ giúp chỉ kết nối trong nhiều năm, và OpenConnect nói các giao thức AnyConnect, GlobalProtect và Pulse từ một tệp nhị phân. Yêu cầu quan trọng không phải danh sách cờ mà là bí mật đến từ đâu, vì mật khẩu trong danh sách đối số có thể bị bất kỳ ai liệt kê được tiến trình đọc.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

FortiClient và một số bản dựng GlobalProtect không có CLI được hỗ trợ nào cả, và ứng dụng cộng đồng hay sản phẩm thay thế có giấy phép của nhà cung cấp là quyết định mua sắm, không phải cách lách. Trong CI, cấp cho tài khoản dịch vụ quyền trên đúng tệp nhị phân đó chứ không phải trên một shell, để đối số bị tiêm không thể trở thành lệnh root.

Con đường ba: tự động hóa GUI, và vì sao nó đến cuối

Khi ứng dụng chính thức không có giao diện, script nhấp nút qua thông điệp cửa sổ hoặc SendKeys. Cách này mong manh theo phiên bản và ngôn ngữ, có thể để lại phiên kết nối dở dang, và âm thầm thất bại khi hộp thoại xuất hiện bằng ngôn ngữ sai. Nếu chọn con đường này, hãy ghim phiên bản ứng dụng, sau đó xác minh trạng thái kết nối thu được, và giữ một phương án thủ công có tài liệu bên cạnh script.

Sự thận trọng tương tự áp dụng cho việc ngắt kết nối cưỡng bức một ứng dụng bằng cách giết tiến trình của nó. Đường hầm có thể sống lâu hơn tiến trình, hoặc một giám sát viên có thể khởi động lại nó, nên giết-rồi-khởi động lại cũng không phải cách đặt lại đáng tin cậy.

Điều gì hỏng sau khi đường hầm đã lên

Một lần quay số thành công chỉ chứng minh xác thực và không gì khác. Hãy kiểm tra tài nguyên mà công việc tồn tại để tới, bằng giao thức riêng của nó và thời gian chờ ngắn, và nêu tên giai đoạn trong thông báo lỗi. Hồ sơ, chứng chỉ và thông tin đăng nhập đã lưu hiển thị trên màn hình của bạn có thể vô hình với phiên dịch vụ, nên hãy chạy công việc một lần dưới chính tài khoản của bộ lập lịch trước khi tin vào nó.

Giới hạn số lần thử lại. Vòng lặp lặp lại thông tin đăng nhập bị từ chối sẽ khóa tài khoản, và lời nhắc MFA không thể được trả lời bởi công việc không cần người trực nếu không có thiết kế đăng ký; các lần thử lại bằng script trước luồng SSO trình duyệt chỉ đốt cháy số lần thử. Ưu tiên tải trọng VPN được phân phối qua MDM hoặc hồ sơ cấu hình cho cả đội, nơi nền tảng sở hữu vòng đời của thông tin đăng nhập, và giữ script cho những ứng dụng không thể quản lý theo cách đó.

Ghi lại mã thoát và tài nguyên thất bại đầu tiên, không phải việc script đã chạy. Chính dòng đó biến cảnh báo của bộ lập lịch thành chẩn đoán trong năm phút.

Bài viết liên quan