Ten un servizo VPN gardado en Axustes do sistema e quere que o terminal o levante. En macOS a ruta compatible é scutil --nc, pero só para servizos que posúe o propio xestor de conexións de rede do sistema. A barra de menús non é a API: os clientes de terceiros adoitan ter a súa propia automatización, e un perfil enviado por un servizo de xestión pode rexeitar un inicio local. Esta é a lista de comprobación que sigo: atope o servizo exacto, lea o seu estado, inícieo, espere a que o estado cambie e despois demostre que o tráfico usa realmente o túnel. Détase no primeiro paso que non cadra, porque cada comando posterior supón que o anterior funcionou.

Atope o servizo antes de intentar inicialo

Empece polo inventario en lugar do nome de perfil que recorda:

scutil --nc help
scutil --nc list

Cada liña emparexa un estado cun identificador de servizo, un tipo e un nome para mostrar. O identificador é o valor contra o que se escriben scripts, porque os nomes para mostrar repítense e pódense editar. O manual de scutil de Apple documenta o modo de conexión de rede, mentres que o --nc help instalado é a lista autorizada de subcomandos nese Mac; non supoña que unha opción dunha guía antiga segue existindo na súa versión de macOS.

Unha lista baleira é un resultado, non un erro. Un servizo creado por un cliente de provedor ou por un perfil de xestión pode estar activo mentres é invisible aquí, ou visible cun tipo que o controlador nativo non pode manexar. Nese caso, use a ferramenta do provedor ou a documentación do perfil. Crear un perfil nativo paralelo só para ter algo que iniciar é un mal negocio.

Lea o estado actual e confirme o selector

Consulte o servizo antes de inicialo, para saber que debería cambiar un inicio correcto:

scutil --nc status "Office VPN"

Se dous servizos comparten un nome para mostrar, o nome é ambiguo. Pase o identificador no seu lugar; o comando acepta calquera dos dous, pero só o identificador garante seleccionar un único servizo. Comprobe que a palabra de estado é unha que recoñeza — normalmente Connected, Disconnected, Connecting ou Disconnecting — antes de analizala nun script. Comprobe tamén se o perfil está xestionado, porque unha configuración bloqueada pode aceptar o comando e aínda así ignoralo ou pedir confirmación.

Esta consulta de estado é barata, así que úsea como garda na automatización: inicie só cando o estado sexa Disconnected e non trate Connecting como un fallo. Se o servizo xa está Connected, omita o inicio en lugar de interromper un túnel que funciona.

Inicie a conexión e espere a que o estado se asente

A solicitude de inicio é asíncrona. O comando regresa cando se aceptou a solicitude, non cando remata a autenticación ou se instalan as rutas. Execúteo e despois sondee o estado cunha espera limitada, e saia se o servizo volve a Disconnected:

scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
  state=$(scutil --nc status "Office VPN" | head -n 1)
  [ "$state" = "Connected" ] && break
  [ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
  sleep 2
  n=$((n + 1))
done

Un estado Connecting que nunca se resolve adoita apuntar a credenciais, MFA ou ao servidor, non a scutil. O comando non pode proporcionar un inicio de sesión interactivo, así que un perfil que espera un token ou unha chave de hardware quedará en Connecting e acabará retrocedendo. Lea a palabra de estado antes de engadir reintentos; un bucle contra un aviso de autenticación non pode ter éxito.

Non trate o estado de saída do shell como dispoñibilidade. O sinal útil é a cadea de estado, seguida da evidencia de que o túnel transporta tráfico. Un comando de inicio que volve en silencio aínda pode deixalo cunha conexión que nunca se autentica.

Demostre que o túnel transporta tráfico, non só que di Connected

Connected describe a conexión, non a decisión de encamiñamento. Os servizos nativos PPP e IKEv2 crean unha interface ppp ou utun e instalan rutas, mentres que un túnel dividido deixa deliberadamente intacta a ruta predeterminada. Inspeccione as interfaces e ambas as familias de enderezos:

ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns

Atope a interface que creou o servizo en lugar de adiviñar un número, e despois pregunte á táboa de encamiñamento que interface usa un destino concreto: route -n get 10.0.0.10, substituíndoo por un host interno. Se informa da interface física, o túnel está activo pero non transporta ese fluxo. Comprobe as rutas do túnel dividido, a orde dos resolutores e calquera regra de devasas local que permita a interface do túnel pero non o proceso.

A resolución de nomes é o falso negativo habitual. Os nomes internos poden resolverse polo resolutor equivocado mentres o túnel está perfectamente san, o que parece un fallo de VPN e non o é. scutil --dns mostra a orde que usará macOS; tras un cambio de resolutor, baleire a caché con dscacheutil -flushcache e sudo killall -HUP mDNSResponder.

Manteña as credenciais e os privilexios fóra da liña de comandos

Nunca poña un contrasinal, unha chave precompartida ou un token nos argumentos. Os argumentos son visibles nas listas de procesos e acaban no historial do shell, e unha transcrición de soporte copiada pode filtralos. A propia xestión de credenciais do perfil — xa sexa un elemento do Keychain, un aviso do sistema ou o fluxo de autenticación do cliente — é o lugar para os segredos.

Executar o comando con sudo non fai que un inicio de sesión interactivo sexa desatendido. Cambia o usuario efectivo, non a dispoñibilidade dun aviso GUI, dun token de hardware ou do Keychain de inicio de sesión. Un LaunchAgent pode iniciar un servizo despois de que o usuario inicie sesión e o Keychain estea desbloqueado; un LaunchDaemon normalmente non pode alcanzar esas pezas da sesión do usuario. Se unha organización xestiona o servizo, as súas regras de ciclo de vida prevalecen sobre calquera script local.

Dete o servizo e verifique que seguiu detido

Dete co mesmo selector que usou para iniciar e despois volva ler o estado en lugar de supoñer que o túnel desapareceu:

scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"

Unha detención que volve a Disconnected aínda deixa unha cousa que comprobar: se o perfil está configurado para conectar baixo demanda, o que pode devolvelo sen o seu script. Se outro cliente posúe rutas no mesmo Mac, esas rutas poden sobrevivir a unha detención nativa. Volva comprobar a ruta antes de concluír que a máquina está fóra da VPN.

Para un envoltorio que execute a man, manteña a orde fixa: lista, estado, inicio, sondaxe, proba de ruta, detención, verificación. Non analice o nome amigable a partir dunha saída de formato libre cando o identificador estea dispoñible, e non trate a saída do comando de inicio como dispoñibilidade. O xestor de conexións informa do estado; a súa proba é o estado máis unha ruta que apunta ao túnel.

Artigos relacionados