Se connecter en utilisant anyconnect à partir de la ligne de commande


28

J'essaie d'utiliser Cisco anyconnect 3.1 à partir de la ligne de commande Linux pour me connecter à un serveur. Je peux me connecter, mais je dois soumettre un paramètre à la fois. J'aimerais me connecter à partir d'un script qui s'exécutera sur un autre serveur. Puis-je faire cela? Quelque chose comme

vpn connect server_add group_name user_name passwd

S'il vous plaît nous montrer la commande que vous souhaitez utiliser. Avez-vous essayé d'utiliser des délimiteurs?
Tog

La commande était / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Mais après cela, il se connecte et demande le nom d’utilisateur, le mot de passe et le groupe. Ce que je veux, c'est passer tout cela en une seule ligne. Mais je ne trouve aucun document à ce sujet. Juste en utilisant le client d'interface graphique.
Kelly Goedert

Réponses:


27

En supposant /opt/cisco/anyconnect/bin/vpnagentdque fonctionne comme il devrait automatiquement être:

Pour vous connecter :

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

Remplacer USERNAME, PASSWORDet HOST. La \nyfin à la fin est d'accepter la bannière de connexion - cela est spécifique à mon hôte.

Notez les guillemets simples 'au lieu de guillemets doubles, "car les guillemets doubles indiquent à Bash d'interpréter certains caractères contenus dans des chaînes, telles que les points d'exclamation, en tant que commandes de l'historique Bash. Les guillemets doubles feront que cette commande échouera avec une erreur «événement introuvable» si le mot de passe contient un point d'exclamation. Les chaînes entre guillemets simples passent des points d'exclamation sans les interpréter.

Pour déconnecter :

/opt/cisco/anyconnect/bin/vpn disconnect

Ceci a été testé avec AnyConnect v3.1.05160.


5
Dans le cas où votre client ne se connecte pas dû à une erreur de validation du certificat Certificate is from an untrusted source, et que vous voulez toujours de se connecter ensuite passer un yparamètre dans la méthode ci - dessus afin que la commande pour se connecter devient: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Notez que vous ne le faites que dans le cas où vous avez une confiance absolue en votre connexion. sinon, il pourrait y avoir un intermédiaire assis et fouillant sur vous.
Shivams

4

J'ai rencontré le même problème que d'essayer d'utiliser Cisco AnyConnect à partir de Mac OS X Terminal. Pour que la commande Cisco vpn tire son entrée d'une entrée standard, vous devez spécifier l'option -s, qui met la commande Cisco vpn en mode interactif. Ensuite, vous pouvez fournir les réponses que vous donnez en mode interactif.

Les réponses que vous devez donner dépendent de la manière dont l'administrateur du serveur VPN a configuré le serveur. Pour moi, les invites interactives VPN sont

Group: 
Username: 
Password: 

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

Donc, la commande que je lance est

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

(Les guillemets autour de EOF doivent empêcher l'extension / la substitution de commande / paramètre dans l'entrée suivante.)

La sortie à la fin consiste à quitter le mode interactif Cisco VPN.


2

J'aime simplifier la ligne de commande et j'utilise donc l'approche ci-dessus dans un script shell appelé gotowork. Comme ci-dessus, je dois fournir le groupe, mon nom d'utilisateur et une clé de sécurité composée d'un code confidentiel privé et d'un code de sécurité RSA SecurID. Je n'ai pas à répondre à la question ci-dessus "accepter?" question. Tout sauf le code RSA est dans le script, la ligne de commande est donc

$ gotowork <RSA passcode>

Je dois l'exécuter en tant que root. Supposons que le code PIN est 1234. L'essentiel du script:

# 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

Utiliser anyconnect 3.1.05170. Testé sur Debian 6, LinuxMint 17


Pourquoi est 0\nnécessaire? Ou est-ce spécifique à votre entreprise?
Acumenus

@ABB Cela vient de dire un zéro 0, suivi d'une nouvelle ligne \nsuivie d'un nom d'utilisateur, suivi d'une nouvelle ligne, \netc.
Matt Friedman

@ MattFriedman, je sais ce que ça dit, mais je ne sais pas pourquoi c'est nécessaire.
Acumenus

1
@ABB Lors d'une exécution interactive et lorsque votre connexion utilise des groupes, les groupes possibles seront énumérés. 0signifie alors "utiliser le premier groupe".
jmd_dk

2

C'est ce qui a fonctionné pour moi sur OSX El Capitan. Les espaces réservés sont entourés de [accolades carrées].

Autoriser

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

Désactiver

/opt/cisco/anyconnect/bin/vpn disconnect

* Je sais que cela ressemble à la réponse de Peter S. ci-dessus.


1
Cela a fonctionné pour moi dans une commande pour El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.