Como escribir un script para o inicio de sesión de AnyConnect en Linux e macOS
O binario vpn le as respostas da entrada estándar na orde dos avisos. Construíde a secuencia, entrecomilládea unha vez, mantedea fóra da lista de procesos e probade primeiro un recurso.
O script remata con cero, o túnel aparece e a seguinte execución rexéitase antes de que chegue a pedir un contrasinal. Ou o mesmo comando funciona nun terminal e falla desde unha tarefa programada cun erro «evento non atopado» que non nomea nada útil. Ambas as dúas son a conversa de entrada estándar do cliente AnyConnect indo mal, non unha falla de rede. Tratade o inicio de sesión como unha pregunta e resposta escrita e os fallos vólvense previsibles e pequenos.
Por que o mesmo comando falla dentro dun script
O cliente le as súas respostas da entrada estándar, unha liña por aviso, na orde en que as pide a pasarela. Calquera cousa que cambie o número de avisos, como un novo rótulo, un selector de grupo ou un desafío de segundo factor, despraza cada resposta posterior unha liña. Entón o cliente le un nome de usuario onde agardaba un contrasinal e informa dun fallo que non sinala ningún dos dous.
Un contrasinal que contén un signo de exclamación engade un segundo fallo máis silencioso. Entre comiñas dobres o intérprete expándeno moito antes de que o cliente vexa nada.
Poñede a carga entre comiñas simples e o carácter viaxa intacto. Esa é toda a corrección, e explica toda unha clase de informes nos que a mesma credencial funciona ao escribirse e falla ao gardarse. Comprobade que fixo o intérprete antes de comprobar a pasarela: imprimídea mediante un envoltorio que mostre os bytes exactos e contade as liñas. A maioría destas investigacións rematan xusto aí.
Escribide as respostas na orde en que o cliente as pide
Executade o cliente de forma interactiva unha vez e anotade cada aviso en orde. Un selector de grupo só aparece cando a pasarela publica varios perfís, e un aviso de rótulo só aparece cando hai un configurado. O ficheiro de respostas ten que coincidir coa pasarela á que realmente apuntades, non coa da documentación.
Despois construíde o ficheiro con esa secuencia exacta, unha resposta por liña. O índice de grupo é o número que o cliente lista, non a posición dun perfil nun documento. Aceptade o rótulo só se a vosa pasarela envía un, e engadide unha liña por cada pregunta extra que se saiba que fai esa pasarela. Iniciade o cliente co indicador non interactivo para que consuma o ficheiro en lugar de agardar un terminal.
connect vpn.lab.example
0
username
password
y
exit/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txtA mesma secuencia pode chegar por unha tubaxe cando preferides non ter un ficheiro no disco. As regras de entrecomillado seguen decidindo se sobrevive.
Mantede a credencial fóra da lista de procesos
Un argumento na liña de ordes é lexible por calquera usuario local durante toda a vida do proceso, así que o contrasinal pertence a un ficheiro ou unha tubaxe e nunca á lista de argumentos. Facede que ese ficheiro só sexa lexible pola conta que executa o script, e borrádeo cando a tarefa remate. En macOS o binario adoita estar na mesma ruta que en Linux, pero confirmade a localización instalada en lugar de supoñela. Un envoltorio que proba as dúas rutas é máis curto que o informe do incidente.
printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.exampleTampouco deixedes que o script reintente para sempre. Un rótulo cambiado ou un contrasinal que caducou durante a noite converten un ficheiro de respostas fixo nun bucle de reintentos, e ese bucle é o que bloquea a conta.
Fallade unha vez, imprimíde o propio texto de erro do cliente e saíde. Unha tarefa programada necesita a mesma revisión de identidade e dispoñibilidade de credenciais que calquera outra tarefa sen supervisión, porque unha credencial que caduca en silencio é indistinguible dunha caída ás tres da madrugada.
Confirmade a sesión antes de confiar no código de saída
Un estado conectado demostra que o túnel existe e nada máis. Probade un recurso que deba ser alcanzable a través del antes de que o script comece o traballo real, e tratade un fallo alí como unha avaría distinta dun inicio de sesión fallido. Doutro xeito reintentaredes unha conexión perfectamente boa que simplemente non pode chegar ao seu destino.
Pedide ao cliente o seu estado antes e despois da desconexión, porque unha sesión obsoleta pode rexeitar a seguinte conexión mentres o voso script informa de éxito.
/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnectRexistrade a saída de estado xunto ao código de saída, xa que un código só non pode separar un inicio de sesión rexeitado dunha sesión que nunca se pechou. Cando a pasarela esixa un segundo factor ou unha aprobación interactiva, deixade de programar ese paso e usade o mecanismo que admite o cliente. Un ficheiro de respostas fixo é unha comodidade para unha credencial que controlades, non unha forma de saltar un paso de autenticación que non controlades. Mantede o alcance así de estreito e isto segue sendo un script curto.
Cando un ficheiro de respostas fixo é a ferramenta equivocada
Un segundo factor ou un aviso de aprobación anulan por completo o patrón, e iso é unha fronteira de deseño, non un crebacabezas de programación. Usade o mecanismo que o cliente admita para ese paso en lugar de adiviñar a resposta de antemán. Un ficheiro fixo só funciona para credenciais que se manteñen iguais entre execucións.
Dous estilos de credencial máis antigos tamén se confunden con AnyConnect. Un perfil vpnc fala un protocolo distinto e quere o nome do grupo como identificador IPSec, despois un segredo de grupo compartido e despois os datos da vosa propia conta.
Como os protocolos difiren, vpnc non pode chegar a unha pasarela que só publica perfís AnyConnect, e a alternativa aberta habitual para ese servizo é openconnect co seu protocolo anyconnect seleccionado. Un ficheiro pcf pertence ao cliente Cisco herdado e, aínda que o seu host, nome de grupo e contrasinal de grupo se poden volver introducir nun cliente que aínda fala Cisco IPsec, o ficheiro non se traslada entre clientes. Un porto inusual ou un modo de tunelización non estándar adoita perderse nese traslado. Decidide que protocolo ofrece a pasarela antes de escoller unha ferramenta.