Połącz używając anyconnect z linii poleceń

31

Próbuję użyć Cisco anyconnect 3.1 z wiersza poleceń systemu Linux, aby połączyć się z serwerem. Mogę się połączyć, ale muszę przesłać jeden parametr na raz. Chciałbym połączyć się ze skryptu, który będzie działał na innym serwerze. Czy mogę to zrobić? Coś jak

vpn connect server_add group_name user_name passwd
Kelly Goedert
źródło
Pokaż nam polecenie, którego chcesz użyć. Czy próbowałeś używać ograniczników?
Tog
Poleceniem było / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Ale potem łączy się i prosi o nazwę użytkownika, hasło i grupę. Chcę przekazać to wszystko w jednym wierszu. Ale nie mogę znaleźć żadnych dokumentów na ten temat. Tylko przy użyciu klienta interfejsu graficznego.
Kelly Goedert

Odpowiedzi:

31

Zakładając, że /opt/cisco/anyconnect/bin/vpnagentddziała tak, jak powinno być automatycznie:

Aby połączyć :

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

Zastąpić USERNAME, PASSWORDi HOST. Na \nykońcu jest zaakceptowanie banera logowania - jest to specyficzne dla mojego hosta.

Zwróć uwagę na pojedyncze cudzysłowy 'zamiast podwójnych "- to dlatego, że podwójne cudzysłowy nakazują Bashowi interpretowanie określonych znaków w ciągach znaków, takich jak wykrzykniki, jako polecenia historii Bash. Podwójne cudzysłowy spowodują, że to polecenie zakończy się niepowodzeniem z błędem „nie znaleziono zdarzenia”, jeśli hasło zawiera wykrzyknik. Ciągi z pojedynczymi cudzysłowami przekazują wykrzykniki bez ich interpretowania.

Aby odłączyć :

/opt/cisco/anyconnect/bin/vpn disconnect

Zostało to przetestowane z AnyConnect v3.1.05160.

Acumenus
źródło
5
W przypadku, gdy klient nie łączy się z powodu błędu walidacji certyfikatów Certificate is from an untrusted source, a nadal chcesz połączyć następnie przekazać yparametr w podany powyżej sposób tak, że polecenie, aby połączyć postać: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Pamiętaj, że rób to tylko wtedy, gdy absolutnie ufasz swojemu połączeniu; w przeciwnym razie może być siedzący pośrednik i węszący na ciebie.
shivams
1
Działa pięknie (choć moja wersja wymaga a GROUPNAME\nUSERNAME\nPASSWORDy. Jeśli chcesz, aby twoje hasło było oddzielone od polecenia (może to być skrypt powłoki lub powiązanie klucza z plikiem dotfile), możesz to zrobić:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Sridhar Sarnobat
@SridharSarnobat Używanie osobnego pliku dla poświadczeń działa, ale drukuje twoje hasło w logu, takie jak:>> notice: Please respond to banner. MYPASSWORD
Willian Vieira
4

Natrafiłem na tę samą trudność, próbując użyć Cisco AnyConnect z terminala Mac OS X. Aby polecenie vpn firmy Cisco pobierało dane ze standardowego wejścia, należy określić opcję -s, która przełącza polecenie cisco vpn w tryb interaktywny. Następnie możesz podać odpowiedzi udzielone w trybie interaktywnym.

Odpowiedzi, które musisz udzielić, zależą od tego, jak administrator serwera VPN skonfigurował serwer. Dla mnie interaktywne monity VPN są

Group: 
Username: 
Password: 

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

Tak więc polecenie, które wykonuję, to

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

(Cytaty wokół EOF mają zapobiegać rozszerzaniu / zastępowaniu poleceń / parametrów w poniższym wejściu.)

Zjazd na końcu jest, aby wyjść z trybu interaktywnego Cisco VPN.

Peter Schoenrank
źródło
2

Lubię upraszczać wiersz poleceń, więc używam powyższego podejścia w skrypcie powłoki o nazwie gotowork. Jak wyżej, muszę podać grupę, moją nazwę użytkownika i klucz dostępu złożony z prywatnego kodu PIN oraz hasła RSA SecurID. Nie muszę odpowiadać na powyższe „zaakceptować?” pytanie. Wszystko oprócz hasła RSA znajduje się w skrypcie, więc wiersz poleceń to

$ gotowork <RSA passcode>

Muszę uruchomić go jako root. Załóżmy, że PIN to 1234. Podstawy skryptu:

# 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

Korzystanie z anyconnect 3.1.05170. Testowany na Debian 6, LinuxMint 17

PetieRay
źródło
Dlaczego jest to 0\nkonieczne? Czy jest to specyficzne dla twojej firmy?
Acumenus,
@ABB To po prostu powiedz, że wypisuje zero 0, po którym następuje nowa linia, \npo której następuje nazwa użytkownika, po której następuje nowa linia \nitp.
Matt Friedman
@MattFriedman, wiem, co to mówi, ale nie wiem, dlaczego jest to konieczne.
Acumenus
1
@ABB Podczas działania interaktywnego, a twoje połączenie korzysta z grup, możliwe grupy zostaną wyliczone. 0oznacza „użyj pierwszej grupy”.
jmd_dk
2

To właśnie działało dla mnie na OSX El Capitan. Symbole zastępcze są otoczone [nawiasami kwadratowymi].

Umożliwić

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

Wyłączyć

/opt/cisco/anyconnect/bin/vpn disconnect

* Wiem, że jest to podobne do powyższej odpowiedzi Petera S.

adampasz
źródło
1
To działało dla mnie w jednym poleceniu dla El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Rabea,