Как заставить соединение Cisco VPN запомнить свой пароль?

Эта проблема

У меня есть подключение Cisco IPSEC VPN в настройках сети на машине Yosemite. Он отлично работает, если не считать запроса пароля при каждом подключении. Сохраненный пароль полностью игнорируется.

Задний план

Если я ввожу пароль в настройках сети и нажимаю «Подключиться», сохраненный пароль исчезает, и появляется диалоговое окно с запросом пароля. Я проверил правильность пароля (он скопирован из документа).

Вещи, которые не сработали

  • Предлагаемое решение для Snow Leopard заключалось в том, чтобы сохранить пароль, открыть доступ к цепочке ключей, найти ключ «Xauth» в системной цепочке ключей и предоставить /usr/libexec/configdдоступ к ключу. Это не имело никакого эффекта.

  • Обычное восстановление разрешений/проверка диска

Странные вещи

Если я наблюдаю за доступом к связке ключей, нажимая кнопку подключения, сохраненный пароль сразу же исчезает из цепочки для ключей, как только появляется диалоговое окно.

Общий вопрос

Как мне правильно сохранить пароль, чтобы мне не приходилось вводить его заново при каждом подключении?

хм. У меня также возникают странные проблемы с аутентификацией в Yosemite, особенно в диалоговом окне «Сеть». Не удивлюсь, если есть ошибка.
Вы уверены, что это не зависит от удаленных политик VPN (теперь разрешено сохранение пароля)?
Это... могло бы объяснить, почему он сразу же исчезает из цепочки для ключей, если его явно сохранить. Придется пообщаться с админами сети!

Ответы (5)

Я предполагаю, что вы используете anyconnect для подключения к серверу Cisco VPN. AnyConnect также можно использовать из терминала. Это работает на macOS Sierra и AnyConnect 3.1.14018. Создайте скрипт bash с помощью следующей команды:

/opt/cisco/anyconnect/bin/vpn connect your-vpn.server.here -s <.credentials

И поместите данные для входа в файл .credentials со следующими тремя строками:

0
your-username
your-password

Не забудьте поставить разумные разрешения на файлы.

Пользователь заявляет: «У меня есть VPN-подключение Cisco IPSEC в настройках сети на компьютере Yosemite». Этот выбор слов привел меня к довольно высокой уверенности в том, что они используют встроенное решение VPN внутри Системных настроек/Сети/+.
Вы можете как-то передать этот файл с зашифрованными именами пользователей и/или паролями? как с файлом паролей в linux

Из прочтения вашего вопроса у меня сложилось впечатление, что вы все делаете правильно, и у Cisco VPN Server есть возможность разрешить сохранение паролей на стороне клиента, установленных на disallow.

Я точно знаю, что такая установка существует.

До сих пор раздражает, что клиент OS X разрешает этот disallowпараметр. Подобно компиляции okular без поддержки DRM для копирования предложения из рецензируемого журнала, кажется, что это принципиально недружественная настройка.

Оба ответа здесь, когда я пишу это, имеют право на это, но существование vpnкомандной строки означает, что мы можем обойти этот враждебный пользователю дизайн с помощью expect. Спасибо предыдущим ответившим, GhostLyrics за раскрытие существования опции на стороне сервера, которая отключает сохранение пароля, и Хансу за раскрытие vpnклиента командной строки.

Создайте файл, который выглядит следующим образом:

#!/usr/bin/expect --
set timeout 10
set addr ""  # VPN Host
set user ""  # Username
set pass ""  # Password (ensure that special characters are escaped)
set group "" # Group NUMBER shown in connect prompt


spawn /opt/cisco/anyconnect/bin/vpn connect $addr
expect "\r\nGroup:*"
send -- "$group\r"
expect "\r\nUsername:*"
send -- "$user\r"
expect "Password: "
send -- "$pass\r"
expect eof

Заполните setполя как обычно. Если ваша VPN похожа на мою, вам предоставляется список «групп», когда вы запускаете файл vpn connect. Запустите это один раз вручную и отметьте, какой номер соответствует группе, с которой вы хотите соединиться. Он не изменится между запусками, если администраторы не добавят/не удалят группы. Здесь нельзя использовать имя, программа ожидает номер.

Как только все будет заполнено, chmod +xэтот скрипт и запустится. Теперь я могу подключиться к своему VPN без помощи рук!

в конце вот бонус, открывай сам тупой клиент и смотри как ты уже подключился! После expect eofсделатьspawn /usr/bin/open "/Applications/Cisco/Cisco\ AnyConnect\ Secure\ Mobility\ Client.app"

Опираясь на ответ Ханса — спасибо! — я хотел немного упростить вызов, минуя Терминал и получая значок AnyConnect в меню состояния macOS. (Я на Мохаве 10.14.6.)

Сначала запустите Терминал, затем перейдите в каталог бинарного файла приложения AnyConnect:

$ cd "/Applications/Cisco/Cisco AnyConnect Secure Mobility Client.app/Contents/MacOS"

Сделайте копию исходного бинарника:

$ sudo cp \
"Cisco AnyConnect Secure Mobility Client" \
"Cisco AnyConnect Secure Mobility Client.orig"

Наконец, перезапишите исходный файл с помощью сценария оболочки, изменив VPN hostимя или адрес вашего VPN-хоста и userваши pa$$w0rdучетные данные:

$ sudo cat > "Cisco AnyConnect Secure Mobility Client" <<'SCRIPT'
#!/bin/sh

# The AnyConnect vpn utility takes some options and commands or else runs
# interactively.
# Its help command shows that -s reads a script from STDIN and that connect
# takes a host as argument.
# Further, the connect command takes the username and password from STDIN; we
# will supply them from a heredoc with the -s option.

/opt/cisco/anyconnect/bin/vpn -s \
connect "VPN host" <<'CREDENTIALS'
user
pa$$w0rd
CREDENTIALS

exec "$0.orig"  # invoke the original app
SCRIPT

Теперь вы сможете запускать AnyConnect из Spotlight или Finder, как обычно. Сначала наш скрипт подключится, а затем передаст выполнение двоичному файлу приложения, поэтому AnyConnect появится в меню состояния рабочего стола.

Удивительный человек, Cisco Anny Connect UX просто дерьмо.
ссылка на будущее: используйте sudo -i, когда отказано в разрешении на запись

Безопасность можно усилить, используя Keychain Access для хранения пароля.

security add-generic-password -s 'vpnpassword'  -a 'user' -w 'password' -T /usr/bin/security

Вот скорректированная версия идеи Кристиана . Удаление внутренних кавычек heredoc требуется для работы расширения параметра.

sudo cat > "Cisco AnyConnect Secure Mobility Client" <<'SCRIPT'
#!/bin/sh

/opt/cisco/anyconnect/bin/vpn -s \
connect "VPN host" <<CREDENTIALS
user
$(security find-generic-password -ws vpnpassword)
CREDENTIALS

exec "$0.orig"  # invoke the original app
SCRIPT