
Мне нужно сделать VPN-подключение с помощью pbk-файла и логина/пароля молча, без диалогов. Так же как запустить скрипт - подключился. Также пользователь не должен создавать подключение вручную, все должно быть сделано программно.
Сначала я создал соединение вручную, чтобы проверить его работоспособность, запустил файл pbk, ввел логин и пароль в диалоговом окне нового соединения и нажал кнопку подключения. Соединение было успешно создано и VPN заработал.
Затем я закрыл соединение и выполнил следующую команду в cmd:
rasdial "MyVPNName" "login" "password" /phonebook:"path\to\file.pbk"
и успешно подключился к VPN. Я был счастлив, все работает так, как я и ожидал. Но когда я запустил ту же команду на другом ПК, я получил ошибку 703:
The connection needs information from you, but the application does not allow user interaction.
Я думаю, что он требует логин и пароль. Я заметил, что он игнорирует логин и пароль в командной строке и работает с неправильными учетными данными или даже без них. Я пытался создать соединение с помощью rasphone.exe, но появляется диалоговое окно создания соединения. Когда я создал соединение с помощью этого диалогового окна - команда rasdial работает даже без логина и пароля в командной строке. Похоже, система сохраняет соединение и использует сохраненные учетные данные для подключения.
Но это не то, что мне нужно. Мне нужно установить VPN-соединение в один клик в моем приложении. В этом приложении я планирую запустить rasdial.exe или другую встроенную утилиту, и пользователь не должен видеть никаких других диалогов, кроме моего приложения, или вводить логин/пароль вручную.
У меня естьПредварительный просмотрUserPw=0в файле pbk, как указано здесьОдин щелчок для подключения к VPN в Windows 10но это не помогает, диалоговое окно все равно появляется.
Или может быть я могу прописать логин и пароль в файле pbk? Это возможно?
решение1
rasdial vpnname
У меня все работало нормально на MS Windows 10, 19XX, 20H1, 20H2, но когда я обновился до 21H1, это перестало работать с конфигурациями VPN, в которых использовалась аутентификация на основе сертификатов или использовались сохраненные учетные данные.
Возникла следующая ошибка:
Ошибка удаленного доступа 703 — для подключения требуется информация от вас, но приложение не допускает взаимодействия с пользователем.
rasdial
похоже, после указания конфигурации для использования стали требоваться 2 дополнительных аргумента: «имя пользователя» и «пароль»
Вы можете заменить " * " на пароль, и тогда вам будет предложено ввести пароль. Вы можете заменить " * * " на имя пользователя и пароль, и тогда вам будет предложено ввести оба.
Однако если вы сохранили учетные данные в своей конфигурации или используете аутентификацию на основе сертификатов, то они на самом деле не требуются.
Вместо этого вы можете передать аргументы " '' '' " (без двойных кавычек, только две одинарные кавычки, подряд идущие '' для имени пользователя, а затем пробел, за которым следуют еще две одинарные кавычки, подряд идущие '' для пароля):
rasdial vpnname '' ''
Попробуйте указать '' '' в качестве имени пользователя и пароля и посмотрите, поможет ли это обойти проблему, с которой вы столкнулись.
2) Если вы используете strongswan в качестве службы туннеля IPSec, к которой вы подключаетесь из Windows, есть "баг", который не позволяет MS Windows "сохранить имя пользователя и пароль" работать. Обходной путь для этой проблемы Windows/strongswan был предоставлен в виде изменений в вашей конфигурации strongswan, который работает: https://serverfault.com/questions/908098/strongswan-clients-access-rights/9081
3) Предполагая туннель IPSec... Я обнаружил, что использование PowerShell для создания VPN "Подключение" похоже поддерживает все необходимое для сохранения учетных данных, так что "rasdial" может быть написан скриптом для проверки, запущен ли именованный vpn, и если нет, запустить его без запроса. Этот скриптовый процесс работал до Windows 10 21H1, но требовал изменения в rasdial, описанного выше.
Единственное предостережение? При первом подключении пользователю необходимо указать свои учетные данные, но если это удалось, то больше их не запрашивают. После этого? Можно использовать скрипт для вызова rasdial для запуска vpn.
Для создания «подключения» VPN с помощью PowerShell нет необходимости указывать /phonebook:\path\to\pbk
Пример с PowerShell для создания «подключения» VPN, доступного для Rasdial, предполагая IKEv2 и другие предположения, при необходимости измените: (пример PowerShell)
Add-VpnConnection -Name "your-vpn-connection-name" -ServerAddress "fqdn.example.com" -TunnelType "IKEv2" -RememberCredential -AuthenticationMethod Eap -EncryptionLevel "Maximum";
Тогда, возможно, стоит добавить больше функций:
Set-VpnConnection -Name "your-vpn-connection-name" -ServerAddress "fqdn.example.com" -SplitTunneling $False -RememberCredential $True -TunnelType "IKEv2" -AuthenticationMethod Eap -UseWinlogonCredential $False -EncryptionLevel "Maximum";
Затем вы можете использовать PowerShell «Set-VpnConnectionIPsecConfiguration» для настройки таких параметров, как используемые шифры, используемые хэши и более продвинутые функции.
4) После того, как у вас будет именованное VPN-подключение, вы сможете:
(Со старым rasdial, который не требовал аргументов имени пользователя и пароля:)
rasdial your-vpn-connection-name
(Более новый rasdial, который требует имя пользователя и пароль, которые вы сохранили или намеревались сохранить в системе:)
rasdial your-vpn-connection-name '' ''
Надеюсь это поможет. Удачи!