Conéctese usando anyconnect desde la línea de comando

31

Estoy tratando de usar Cisco anyconnect 3.1 desde la línea de comandos de Linux para conectarme a un servidor. Puedo conectarme, pero tengo que enviar un parámetro a la vez. Me gustaría conectarme desde un script que se ejecutará en otro servidor. ¿Puedo hacer eso? Algo como

vpn connect server_add group_name user_name passwd
Kelly Goedert
fuente
Muéstranos el comando que deseas usar. ¿Has intentado usar delimitadores?
Tog
El comando era / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Pero luego se conecta y solicita nombre de usuario, contraseña y grupo. Lo que quiero es pasar todo esto en una sola línea. Pero no puedo encontrar ningún documento sobre esto. Solo por usar la interfaz gráfica del cliente.
Kelly Goedert

Respuestas:

31

Suponiendo que se /opt/cisco/anyconnect/bin/vpnagentdestá ejecutando como debería ser automáticamente:

Para conectar :

printf 'USERNAME\nPASSWORD\ny' | /opt/cisco/anyconnect/bin/vpn -s connect HOST

Reemplazar USERNAME, PASSWORDy HOST. Al \nyfinal es aceptar el banner de inicio de sesión; esto es específico de mi host.

Tenga en cuenta las comillas simples en 'lugar de las dobles ": esto se debe a que las comillas dobles le dicen a Bash que interprete ciertos caracteres dentro de las cadenas, como los signos de exclamación, como comandos del historial de Bash. Las comillas dobles harán que este comando falle con un error de "evento no encontrado" si la contraseña contiene un signo de exclamación. Las cadenas entre comillas simples pasan signos de exclamación sin interpretarlas.

Para desconectar :

/opt/cisco/anyconnect/bin/vpn disconnect

Esto se probó con AnyConnect v3.1.05160.

Acumenus
fuente
55
En caso de que su cliente no se conecta debido a un error de validación de certificados Certificate is from an untrusted source, y todavía se quiere conectar a continuación, pasar un yparámetro en el método anterior para que el comando de conexión se convierte en: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Tenga en cuenta que haga esto solo en el caso de que confíe absolutamente en su conexión; de lo contrario, podría haber un intermediario sentado y husmeando.
shivams
1
Funciona a la perfección (aunque mi versión necesita una GROUPNAME\nUSERNAME\nPASSWORDy. Si desea mantener su contraseña separada del comando (que puede ser un script de shell o un enlace de clave de archivo de puntos), puede hacer esto:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Sridhar Sarnobat
@SridharSarnobat El uso de un archivo separado para las credenciales funciona, pero imprime su contraseña en el registro como:>> notice: Please respond to banner. MYPASSWORD
Willian Vieira
4

Me encontré con la misma dificultad al tratar de usar Cisco AnyConnect desde Mac OS X Terminal. Para que el comando Cisco vpn tome su entrada de la entrada estándar, debe especificar la opción -s, que pone el comando Cisco vpn en modo interactivo. Luego puede proporcionar las respuestas que da en modo interactivo.

Las respuestas que debe dar dependen de cómo el administrador del servidor VPN haya configurado el servidor. Para mí, las indicaciones interactivas de vpn son

Group: 
Username: 
Password: 

Blah, blah, blah, ...
accept? :

Entonces el comando que ejecuto es

$ /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.com <<"EOF"
0
username
password
y
exit
EOF

(Las comillas alrededor de EOF son para evitar la expansión / sustitución de comandos / parámetros en la siguiente entrada).

La salida al final es salir del modo interactivo Cisco vpn.

Peter Schoenrank
fuente
2

Me gusta simplificar la línea de comandos, por lo que utilizo el enfoque anterior en un script de shell llamado gotowork. Como se indicó anteriormente, debo proporcionar el grupo, mi nombre de usuario y una contraseña compuesta de un PIN privado más un código de acceso RSA SecurID. No tengo que responder lo anterior "¿aceptar?" pregunta. Todo menos el código de acceso RSA está en el script, por lo que la línea de comando es

$ gotowork <RSA passcode>

Tengo que ejecutarlo como root. Suponga que el PIN es 1234. El guión esencial:

# put the interactive answers into a text file
echo -e "0\nusername\n1234$1\n" > /tmp/answers.txt
# find the path to the anyconnect executables
ciscopath="$(dirname $(find /opt/cisco -depth -name vpnagentd))"
# make sure the anyconnect daemon is running
[ $(pidof vpnagentd) ] || $ciscopath/vpnagentd
# connect
$ciscopath/vpn -s < /tmp/answers.txt connect remote.mycompany.com

Usando anyconnect 3.1.05170. Probado en Debian 6, LinuxMint 17

PetieRay
fuente
¿Por qué es 0\nnecesario? ¿O es específico de su empresa?
Acumenus
@ABB Eso solo dice salida cero 0, seguido de una nueva línea \nseguida de nombre de usuario, seguido de una nueva línea, \netc ...
Matt Friedman
@MattFriedman, sé lo que dice, pero no sé por qué es necesario.
Acumenus
1
@ABB Cuando se ejecuta de forma interactiva y su conexión usa grupos, se enumerarán los posibles grupos. 0entonces significa "usar el primer grupo".
jmd_dk
2

Esto es lo que funcionó para mí en OSX El Capitan. Los marcadores de posición están rodeados por [llaves cuadradas].

Para permitir

/opt/cisco/anyconnect/bin/vpn -s connect [HOST_ADDRESS] <<"EOF"
[VPN_USERNAME]
[VPN_PASSWORD] 
y
EOF

Deshabilitar

/opt/cisco/anyconnect/bin/vpn disconnect

* Sé que esto es similar a la respuesta de Peter S. anterior.

adampasz
fuente
1
Esto funcionó para mí en un comando para El Capitánprintf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea el