Unfortunately, the Cisco AnyConnect client for Mac conflicts with Pow. And by "conflicts", I mean it causes a grey-screen-of-death kernel panic anytime you connect to the VPN and Pow is installed.
As an alternative, there is OpenConnect, a command-line client for Cisco's AnyConnect SSL VPN.
Here's how to get it set up on Mac OS X:
-
OpenConnect can be installed via homebrew:
brew update brew install openconnect
-
Install the Mac OS X TUN/TAP driver
-
(Optional) Running openconnect requires sudo, presumably because it affects resolution of DNS. So, I added password-less sudo ability for the openconnect command.
sudo visudo -f /etc/sudoers
And added this line:
%admin ALL=(ALL) NOPASSWD: /usr/local/bin/openconnect
-
(Optional) When connecting to your SSL VPN, openconnect may complain about a "self-signed certificate" being in the chain and force you to explicitly accept it every time. The self-signed cert is actually the root certficate and (hopefully) is one with implicit trust (i.e. trusted by browsers), so we can safely trust it by specifying the CA file after exporting it from KeyChain:
-
Determine the name your root certificate (i.e. visit your SSL VPN in Chrome, click the green lock, click "Certificate Information")
-
Open the Keychain Access App
-
Search the "System Roots" keychain to find your root certificate and select it
-
File
>Export Items...
the certificate as a.pem
file somewhere on your hard drive (I put it in~/.ssh/<certificate name>.pem
-
Connect!
sudo openconnect --user=<VPN username> --cafile=<.pem file from step 4.3> <your vpn hostname>
The only thing you should be prompted for is your VPN password. I added the command to my aliases file.
-
To disconnect, just Ctrl-c in the window where you started the VPN connection.
I had an incident after an unclean VPN exit where later the VPN hostname could not be found. I guess the DNS resolver was messed up. I was forced to reboot to fix it so I could reconnect to the VPN.
Hi @choodique
The open connect CLI supports two options, token-secret and token-mode which will let you enter a second password assuming it's based around a common method of 2FA. For a typical totp code (like you'd use with google authenticator on your phone), you'd add the following:
--token-mode=totp
--token-secret=base32:$VPN_TOTP_SECRET \
Here, the TOTP_SECRET is not the 6 digit code, but rather the long secret key which the app will use to generate these codes. Here I've encoded it using base32 and stored it securely.
Note: This will completely negate the protection of 2FA if your device is compromised, at the very least you should be storing these credentials somewhere only you can access, preferably using a proper secrets manager.
From the
openconnect
man page: