У меня есть подключение Cisco IPSEC VPN в настройках сети на машине Yosemite. Он отлично работает, если не считать запроса пароля при каждом подключении. Сохраненный пароль полностью игнорируется.
Если я ввожу пароль в настройках сети и нажимаю «Подключиться», сохраненный пароль исчезает, и появляется диалоговое окно с запросом пароля. Я проверил правильность пароля (он скопирован из документа).
Предлагаемое решение для Snow Leopard заключалось в том, чтобы сохранить пароль, открыть доступ к цепочке ключей, найти ключ «Xauth» в системной цепочке ключей и предоставить /usr/libexec/configd
доступ к ключу. Это не имело никакого эффекта.
Обычное восстановление разрешений/проверка диска
Если я наблюдаю за доступом к связке ключей, нажимая кнопку подключения, сохраненный пароль сразу же исчезает из цепочки для ключей, как только появляется диалоговое окно.
Как мне правильно сохранить пароль, чтобы мне не приходилось вводить его заново при каждом подключении?
Я предполагаю, что вы используете 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
Не забудьте поставить разумные разрешения на файлы.
Из прочтения вашего вопроса у меня сложилось впечатление, что вы все делаете правильно, и у Cisco VPN Server есть возможность разрешить сохранение паролей на стороне клиента, установленных на disallow
.
Я точно знаю, что такая установка существует.
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 появится в меню состояния рабочего стола.
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
n1000
Маттео Гуарнерио
Майки ТК