Stellen Sie mit anyconnect von der Befehlszeile aus eine Verbindung her

31

Ich versuche, Cisco anyconnect 3.1 über die Linux-Befehlszeile zu verwenden, um eine Verbindung zu einem Server herzustellen. Ich kann eine Verbindung herstellen, muss jedoch jeweils einen Parameter übermitteln. Ich möchte eine Verbindung über ein Skript herstellen, das auf einem anderen Server ausgeführt wird. Kann ich das machen? So etwas wie

vpn connect server_add group_name user_name passwd
Kelly Goedert
quelle
Bitte zeigen Sie uns den Befehl, den Sie verwenden möchten. Haben Sie versucht, Trennzeichen zu verwenden?
Tog
Der Befehl war / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Danach wird eine Verbindung hergestellt und nach Benutzername, Kennwort und Gruppe gefragt. Was ich möchte, ist, all dies in einer Zeile zu übergeben. Aber ich kann keine Dokumente dazu finden. Einfach mit dem grafischen Interface-Client.
Kelly Goedert

Antworten:

31

Angenommen, /opt/cisco/anyconnect/bin/vpnagentdes läuft so, wie es automatisch sein sollte:

So verbinden Sie sich :

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

Ersetzen USERNAME, PASSWORDund HOST. Am \nyEnde ist das Login-Banner zu akzeptieren - dies ist spezifisch für meinen Host.

Beachten Sie die einfachen Anführungszeichen 'anstelle von doppelten Anführungszeichen. "Dies liegt daran, dass Bash durch doppelte Anführungszeichen angewiesen wird, bestimmte Zeichen in Zeichenfolgen, z. B. Ausrufezeichen, als Bash-Verlaufsbefehle zu interpretieren. Doppelte Anführungszeichen führen dazu, dass dieser Befehl mit dem Fehler "Ereignis nicht gefunden" fehlschlägt, wenn das Kennwort ein Ausrufezeichen enthält. Zeichenfolgen in Anführungszeichen geben Ausrufezeichen weiter, ohne sie zu interpretieren.

Verbindung trennen :

/opt/cisco/anyconnect/bin/vpn disconnect

Dies wurde mit AnyConnect v3.1.05160 getestet.

Acumenus
quelle
5
Wenn Ihr Client keine Verbindung aufgrund Zertifikats Validierungsfehler Certificate is from an untrusted source, und Sie wollen immer noch dann einen Pass verbinden yParameter in dem oben beschriebenen Verfahren , so dass der Befehl zu verbinden wird: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Beachten Sie, dass Sie dies nur in dem Fall tun, in dem Sie Ihrer Verbindung absolut vertrauen. Andernfalls sitzt möglicherweise ein Mittelsmann und schnüffelt auf Ihnen herum.
Shivams
1
Funktioniert wunderbar (obwohl meine Version a benötigt GROUPNAME\nUSERNAME\nPASSWORDy. Wenn Sie Ihr Passwort von dem Befehl (der ein Shell-Skript oder eine Dotfile-Schlüsselbindung sein kann) trennen möchten, können Sie dies tun:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Sridhar Sarnobat
@SridharSarnobat Die Verwendung einer separaten Datei für die Anmeldeinformationen funktioniert, druckt Ihr Kennwort jedoch wie folgt im Protokoll aus:>> notice: Please respond to banner. MYPASSWORD
Willian Vieira,
4

Beim Versuch, Cisco AnyConnect vom Mac OS X Terminal aus zu verwenden, trat dieselbe Schwierigkeit auf. Damit der Cisco vpn-Befehl seine Eingabe von der Standardeingabe übernimmt, müssen Sie die Option -s angeben, mit der der Cisco vpn-Befehl in den interaktiven Modus versetzt wird. Anschließend können Sie die Antworten, die Sie geben, im interaktiven Modus bereitstellen.

Welche Antworten Sie geben müssen, hängt davon ab, wie der VPN-Serveradministrator den Server konfiguriert hat. Für mich sind die interaktiven vpn-Eingabeaufforderungen

Group: 
Username: 
Password: 

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

Der Befehl, den ich ausführe, lautet also

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

(Die Anführungszeichen um EOF sollen das Erweitern / Ersetzen von Befehlen / Parametern in der folgenden Eingabe verhindern.)

Der Ausgang am Ende ist die Cisco vpn interaktiven Modus zu verlassen.

Peter Schönrank
quelle
2

Ich mag es, die Befehlszeile zu vereinfachen, also benutze ich den obigen Ansatz in einem Shell-Skript namens gotowork. Wie oben muss ich die Gruppe, meinen Benutzernamen und einen Zugangsschlüssel angeben, der aus einer privaten PIN und einem RSA SecurID-Zugangscode besteht. Ich muss das oben stehende "Akzeptieren?" Nicht beantworten. Frage. Alles außer dem RSA-Passcode befindet sich im Skript, die Befehlszeile also

$ gotowork <RSA passcode>

Ich muss es als root ausführen. Angenommen, die PIN lautet 1234. Das Wesentliche zum Skript:

# 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

Verwenden von anyconnect 3.1.05170. Getestet unter Debian 6, LinuxMint 17

PetieRay
quelle
Warum ist das 0\nnotwendig? Oder ist es spezifisch für Ihr Unternehmen?
Acumenus
@ABB Das bedeutet nur, dass eine Null ausgegeben wird 0, gefolgt von einer neuen Zeile, gefolgt von einem \nBenutzernamen, gefolgt von einer neuen Zeile \nusw.
Matt Friedman
@MattFriedman, ich weiß, was es sagt, aber ich weiß nicht, warum es überhaupt notwendig ist.
Acumenus
1
@ABB Wenn Sie interaktiv ausgeführt werden und Ihre Verbindung Gruppen verwendet, werden die möglichen Gruppen aufgelistet. 0bedeutet dann "benutze die erste Gruppe".
jmd_dk
2

Das hat bei mir unter OSX El Capitan funktioniert. Platzhalter sind von [eckigen Klammern] umgeben.

Ermöglichen

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

Etwas deaktivieren

/opt/cisco/anyconnect/bin/vpn disconnect

* Ich weiß, dass dies der obigen Antwort von Peter S. ähnelt.

adampasz
quelle
1
Dies funktionierte für mich in einem Befehl für El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea