Подключитесь используя 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. Если вы хотите сохранить свой пароль отдельно от команды (это может быть сценарий оболочки или привязка ключа cat ~/.anyconnect_credentials | /opt/cisco/anyconnect/bin/vpn -s connect HOST
dotfile
@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

PetieRay
источник
Зачем это 0\nнужно? Или это специфично для вашей компании?
Acumenus
@ABB Это просто говорит, что выведите ноль 0, за которым \nследует новая строка , за которой следует имя пользователя, затем новая строка и \nт. Д.
Мэтт Фридман,
@MattFriedman, я знаю, что он говорит, но я не знаю, зачем это вообще нужно.
Acumenus
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

* Я знаю, что это похоже на ответ Питера С. выше.

adampasz
источник
1
Это сработало для меня в одной команде для El Capitan,printf "y\n[GROUP]\n\n[PASSWORD]\ny\n" | /opt/cisco/anyconnect/bin/vpn -s connect HOST
Рабея