Tres preguntas decídeno, e só tres. Crea o cliente unha entrada de conexión no sistema operativo que sobrevive a un reinicio? Inclúe unha liña de ordes que poida tomar un segredo de algo distinto da súa lista de argumentos? Obriga o seu requisito de identidade a unha persoa a responder un aviso do navegador? Responde nesa orde e a elección deixa de ser cuestión de gusto, porque un traballo programado só pode ser tan sen interface como permita a máis feble das tres respostas.

Emparella o cliente coas tres capas programables

Un perfil nativo do sistema operativo, unha CLI do fabricante, un cliente só con GUI e un cliente con SSO do navegador necesitan catro enfoques distintos. Os dous primeiros sobreviven a reinicios sen supervisión, e os reinicios sen supervisión son todo o obxectivo. Os outros dous necesitan unha decisión de deseño antes que un 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

Ruta un: o sistema operativo xa é dono do perfil

É a ruta máis barata e a que máis xente pasa por alto. En Windows, rasdial "Office" conecta e rasdial "Office" /disconnect péchao; rasphone -d "Office" conduce a mesma entrada pola interface de marcación. macOS lista os servizos gardados con scutil --nc list e inicia un con scutil --nc start. Linux entrega o traballo a NetworkManager.

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

Estas interfaces só coñecen perfís propiedade do sistema operativo, así que non poden conducir un cliente de terceiros arbitrario. Cando falta o perfil, críao unha vez e deixa que o script o comprobe en lugar de recrealo en cada execución. Fai o script idempotente: le o estado actual, conecta só cando estea desconectado e despois proba o nome privado que o traballo necesita de verdade.

Ruta dous: o fabricante inclúe unha liña de ordes

Algúns clientes expoñen suficiente liña de ordes para poder envolvilos: Cisco AnyConnect tivo durante anos un axudante só de conexión, e OpenConnect fala os protocolos AnyConnect, GlobalProtect e Pulse desde un só binario. O requisito que importa non é a lista de indicadores senón de onde sae o segredo, porque un contrasinal na lista de argumentos pode lelo calquera que poida listar procesos.

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

FortiClient e algunhas compilacións de GlobalProtect non teñen ningunha CLI soportada, e un cliente comunitario ou un substituto licenciado polo fabricante é unha decisión de compra, non unha solución. En CI, concede á conta de servizo dereitos sobre ese binario exacto e non sobre un shell, para que un argumento inxectado non poida converterse nunha orde de root.

Ruta tres: automatización de GUI, e por que vai ao final

Cando o cliente oficial non ten interface, os scripts premen botóns mediante mensaxes de ventá ou SendKeys. Iso é fráxil fronte á versión e ao idioma, pode deixar unha sesión a medio conectar e falla en silencio cando aparece un diálogo no idioma equivocado. Se tomas esta ruta, fixa a versión do cliente, verifica despois o estado de conexión resultante e mantén un plan manual documentado xunto ao script.

A mesma precaución se aplica a desconectar un cliente pola forza matando o seu proceso. O túnel pode sobrevivir ao proceso, ou un supervisor pode reinicialo, así que matar e reiniciar tampouco é un restablecemento fiable.

Que se rompe despois de que o túnel estea levantado

Unha marcación correcta demostra autenticación e nada máis. Proba o recurso polo que existe o traballo, co seu propio protocolo e un tempo de espera curto, e nomea a etapa na mensaxe de fallo. Os perfís, certificados e credenciais gardadas visibles no teu escritorio poden ser invisibles para a sesión do servizo, así que executa o traballo unha vez coa conta propia do planificador antes de confiar nel.

Limita os reintentos. Un bucle que repite unha credencial rexeitada bloquea contas, e un aviso de MFA non o pode responder un traballo sen interface sen un deseño de alta; os reintentos con script contra un fluxo SSO do navegador só queiman intentos. Prefire unha carga de VPN entregada por MDM ou un perfil de configuración para unha frota, onde a plataforma é dona do ciclo de vida das credenciais, e reserva os scripts para os clientes que non se poden xestionar así.

Rexistra o código de saída e o primeiro recurso que falla, non o feito de que o script se executase. Esa soa liña é a que converte unha alerta do planificador nun diagnóstico de cinco minutos.

Artigos relacionados