-
-
Save twksos/44b45abf5263635776ec to your computer and use it in GitHub Desktop.
-- Please set your vpn connection name and password here | |
set VPNName to "VPN name" | |
set VPNpassword to "VPN password" | |
tell application "System Events" | |
tell current location of network preferences | |
set VPNService to service VPNName | |
end tell | |
set isConnected to connected of current configuration of VPNService | |
if isConnected then | |
disconnect VPNService | |
else | |
connect VPNService | |
set startTime to current date | |
repeat until exists (static text 1 of window 1 of application process "UserNotificationCenter" whose name is "Enter your user authentication") | |
if (current date) - startTime is greater than 8 then | |
error "Could not connect, the connection dialog did not pop up" | |
exit repeat | |
end if | |
delay 0.2 | |
end repeat | |
set theProcess to application process "UserNotificationCenter" | |
set theWindow to window 1 of theProcess | |
set theDescription to static text 2 of theWindow | |
if name of theDescription is "Enter your user authentication" then | |
set theControls to get entire contents of theWindow | |
set thePassword to text field 1 of theWindow whose description is "secure text field" | |
set value of thePassword to VPNpassword | |
set theOKButton to button 1 of theWindow whose title is "OK" | |
click theOKButton | |
repeat until exists (button 1 of window 1 of application process "UserNotificationCenter" whose title is "Disconnect") | |
if exists (button 1 of window 1 of application process "UserNotificationCenter" whose title is "Cancel") then | |
set theCancelButton to button 1 of theWindow whose title is "Cancel" | |
click theCancelButton | |
error "please check password in the script." | |
exit repeat | |
end if | |
delay 0.2 | |
end repeat | |
set theOKButton to button 1 of theWindow whose title is "OK" | |
click theOKButton | |
end if | |
end if | |
end tell |
Hello guys, I finally found a working solution. I'm using Anyconnect VPN secure mobility 4.8
We can use this to connect to Anyconnect with terminal
To connect:
printf 'USERNAME\nPASSWORD\ny' | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Replace USERNAME, PASSWORD, and HOST. The \ny at the end is to accept the login banner - this is specific to my host.
Note the single quotes ' instead of double quotes " - this is because double quotes tell Bash to interpret certain characters within strings, such as exclamation marks, as Bash history commands. Double quotes will make this command fail with an "event not found" error if the password contains an exclamation mark. Single-quoted strings pass exclamation marks along without interpreting them.
To disconnect:
/opt/cisco/anyconnect/bin/vpn disconnect
I've made an alias to bash_profile to those commands
Thanks a lot, your solution works.
best combine this with https://github.com/plyint/encpass.sh to not store unencrypted passwords in scripts
While this looks like a nifty script, I don't like the idea of storing the password in plain text. It would be great if someone could add the ability for the password to come from Keychain item. For now, I'm using this scutil solution: http://superuser.com/a/934577
Also, I'm getting this error on OS X 10.11.3:
It may be able to be resolved using the workaround commented on here: https://gist.github.com/adgedenkers/3874427#gistcomment-1656529