Підключіться за допомогою anyconnect з командного рядка


31

Я намагаюся використовувати Cisco anyconnect 3.1 з командного рядка Linux для підключення до сервера. Я можу підключитися, але мені потрібно подавати один параметр за раз. Я хотів би підключитися зі сценарію, який буде працювати на іншому сервері. Чи можу я це зробити? Щось на зразок

vpn connect server_add group_name user_name passwd

Будь ласка, покажіть нам команду, яку ви хочете використовувати. Ви пробували використовувати роздільники?
Тог

Команда була / opt / cisco / anyconnect / bin / vpn connect 10.1.1.1 Але після цього вона підключається і запитує ім'я користувача, пароль та групу. Що я хочу - це пропустити все це в один рядок. Але я не можу знайти жодного документа з цього приводу. Просто за допомогою клієнта графічного інтерфейсу.
Келлі Гедерт

Відповіді:


31

Припустимо, що /opt/cisco/anyconnect/bin/vpnagentdвоно працює так, як воно повинно бути автоматично:

Для підключення :

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

Замінити USERNAME, PASSWORDі HOST. На \nyзавершення потрібно прийняти банер для входу - це специфічно для мого хоста.

Зверніть увагу на одиничні лапки 'замість подвійних лапок "- це тому, що подвійні лапки говорять Bash інтерпретувати певні символи в рядках, наприклад, знак оклику, як команди історії Bash. Подвійні лапки зберуть цю команду з помилкою "подія не знайдена", якщо пароль містить знак оклику. Рядки з цитуванням, що мають одне цитування, передають знак оклику разом, не інтерпретуючи їх.

Для відключення :

/opt/cisco/anyconnect/bin/vpn disconnect

Це було протестовано за допомогою AnyConnect v3.1.05160.


5
У разі , якщо ваш клієнт не може підключитися з - за помилки перевірки сертифіката Certificate is from an untrusted source, і ви все ще хочете підключити потім передати yпараметр в зазначеному вище способі , так що команда підключення стає: printf "y\nUSERNAME\nPASSWORD\ny" | /opt/cisco/anyconnect/bin/vpn -s connect HOST. Зауважте, що робіть це лише у випадку, якщо ви абсолютно довіряєте своєму зв’язку; в іншому випадку може бути посередник, який сидить і сідає на вас.
шивам

1
Працює чудово (хоча моя версія потребує а GROUPNAME\nUSERNAME\nPASSWORDy. Якщо ви хочете, щоб ваш пароль був окремим від команди (яка може бути скриптом оболонки або прив'язкою ключа dotfile), ви можете це зробити:cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Шрідхар Сарнобат

@SridharSarnobat Використання окремого файлу для облікових даних працює, але він друкує ваш пароль у журналі, наприклад:>> notice: Please respond to banner. MYPASSWORD
Вілліан Віейра,

4

Я зіткнувся з такою ж складністю, що намагаюся використовувати Cisco AnyConnect від Mac OS X Terminal. Щоб команда Cisco vpn взяла свій вклад зі стандартного введення, вам потрібно вказати параметр -s, який переводить команду Cisco vpn в інтерактивний режим. Потім ви можете надати відповіді, які ви даєте в інтерактивному режимі.

Відповіді, які потрібно надати, залежать від того, як адміністратор сервера VPN налаштував сервер. Для мене інтерактивні підказки vpn є

Group: 
Username: 
Password: 

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

Отже команда, яку я виконую, - це

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

(Цитати навколо EOF повинні запобігати розширенню / заміні команд / параметрів у наступному вході.)

Вихід в кінці, щоб вийти з інтерактивного режиму в Cisco VPN.


2

Мені подобається спростити командний рядок, тому я використовую вищезазначений підхід у сценарії оболонки під назвою gotowork. Як зазначено вище, мені потрібно вказати групу, моє ім’я користувача та пароль, що складається з приватного PIN-коду плюс пароль доступу RSA SecurID. Мені не доведеться відповідати на вищезгадане "прийняти?" питання. Все, крім коду доступу RSA, є у сценарії, тому командний рядок є

$ gotowork <RSA passcode>

Я повинен запустити це як root. Припустимо, PIN-код є 1234. Основні сценарії:

# 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

Використовуючи anyconnect 3.1.05170. Тестовано на Debian 6, LinuxMint 17


Навіщо це 0\nпотрібно? Або це специфічно для вашої компанії?
Акумен

@ABB Це просто виведення нуля 0, за ним новий рядок \n, ім'я користувача, а потім новий рядок \nі т.д. ...
Метт Фрідман

@MattFriedman, я знаю, що це говорить, але я не знаю, навіщо це взагалі потрібно.
Акумен

1
@ABB Під час інтерактивного запуску та підключення використовує групи, можливі групи будуть перераховані. 0то означає "використовувати першу групу".
jmd_dk

2

Це те, що працювало для мене на OSX El Capitan. Заповнювачі місця оточені [квадратними дужками].

Для того, щоб

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

Щоб відключити

/opt/cisco/anyconnect/bin/vpn disconnect

* Я знаю, що це схоже на відповідь Пітера С. вище.


1
Це працювало для мене в одній команді для El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Рабеа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.