Изменить пароль для профиля Wi-Fi

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

(Да, реальное решение — заставить ИТ-команду сохранить тот же пароль, но этого не произойдет).

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

Я могу поместить гостевой пароль на следующий месяц в файл во внутренней сети больницы, где к нему может получить доступ только тот, у кого в настоящее время есть пароль на этот месяц, и я могу использовать bitsadmin в пакетном сценарии для извлечения пароля к локальному файлу (см. ниже). Я могу настроить задачу на компьютере каждого пациента для запуска этого скрипта незадолго до конца месяца.

Мой вопрос: когда пароль прошлого месяца не работает в начале нового месяца, как я могу изменить пароль для этого сетевого подключения из пакетного сценария?

Я знаю, что могу использовать...

netsh wlan show profile name=“INSERT_SSID_HERE” key=clear

... чтобы узнать текущий пароль, но как его установить?


РЕДАКТИРОВАТЬ: я обнаружил, что в Windows Vista и более поздних версиях парольная фраза Wi-Fi хранится в XML-файле по адресу C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces[Interface Guid].xml. Он появляется в формате:

- <sharedKey>
    <keyType>passPhrase</keyType>
    <protected>true</protected>
    <keyMaterial> ** 400+ hexit number ** </keyMaterial>
  </sharedKey>

Я предполагаю, что для смены пароля мне нужно зашифровать новый пароль с помощью соответствующего алгоритма и обновить этот файл XML. Есть ли команда, которую я могу использовать, чтобы сделать это автоматически? Если нет, то какой алгоритм шифрования следует использовать?

Более простой альтернативой может быть удаление шифрования:

    <protected>false</protected>
    <keyMaterial>plainTextPassword</keyMaterial>

Однако, когда я пытаюсь перезапустить соединение Wi-Fi после перезагрузки компьютера, используя XML-файл, который был изменен таким образом, происходит сбой соединения.


Предпочтительно решение, не требующее перезагрузки.


Пакетный скрипт для восстановления пароля:

@echo off
setlocal
set file=%~dp0result.txt
bitsadmin /reset
bitsadmin /create /download job
bitsadmin /addfile job http://example.com/password.html %file%
bitsadmin /resume job

timeout 5

bitsadmin /getstate job | find /i "TRANSFERRED" && goto :done
bitsadmin /cancel job
exit /b 1

:done
bitsadmin /complete job
:: results.txt now holds the new password
exit /b 0

person James Newton    schedule 21.01.2016    source источник
comment
Это больница строгого режима! Более простое решение, отвечающее всем вашим текущим требованиям безопасности, — передать пароль пациентам на листке бумаги.   -  person John3136    schedule 22.01.2016
comment
Это было бы так мило. Но многие из них не могут пошевелить руками. Для некоторых из них их ноутбуки (а также их детекторы движения глаз и сканеры с одним переключателем) являются единственной связью с внешним миром.   -  person James Newton    schedule 22.01.2016
comment
У меня есть идея, как это сделать, я могу ввести гостевой пароль следующего месяца в файл во внутренней сети больницы, как к нему нужно будет получить доступ? Путь UNC, FTP или что-то подобное?   -  person Will Ryan    schedule 29.01.2016
comment
Просто нужно знать, как получить доступ к файлу, чтобы я мог написать что-то соответственно   -  person Will Ryan    schedule 29.01.2016
comment
Пакетный сценарий, который я даю в вопросе, позволяет мне создать файл results.txt, содержащий пароль, в любом месте на компьютере конечного пользователя. Вы можете считать, что такой файл существует и находится там, где вы хотите.   -  person James Newton    schedule 29.01.2016
comment
Я думаю, что загрузка не должна быть паролем в виде обычного текста, вы должны загрузить весь XML, сгенерированный из папки профиля экспорта netsh wlan = C: \ name = My Network key = clear. Я вижу, как работает логика: 1- Существует ли XML-файл в удаленном месте 2- если да, загрузите файл (файл нужно будет поместить туда задолго до смены пароля) 3- выполните проверку связи с google.com, если это не удается, то удалите текущую конфигурацию, используя netsh wlan, удалите имя профиля = Моя сеть и примените загруженный XML-файл.   -  person Will Ryan    schedule 29.01.2016
comment
Таким образом, пароль может быть загружен заранее и будет автоматически применяться после истечения срока действия пароля, для быстрого внесения изменений необходимо будет регулярно запускать запланированную задачу, но если скрипт может пропинговать Google, то он будет завершен в течение второй или два   -  person Will Ryan    schedule 29.01.2016
comment
Я должен был объяснить, что на самом деле делает netsh wlan export... Он экспортирует файл конфигурации с настройками WiFi и зашифрованным паролем, этот XML-файл можно применить к любому другому ноутбуку, чтобы дать ему правильную конфигурацию и, что более важно, новый пароль: ) Вам придется изменить пароль на новый на своем ноутбуке и экспортировать файл конфигурации.   -  person Will Ryan    schedule 29.01.2016
comment
Просто в качестве примечания, я видел, как это делается в vbs, поэтому, если я там, где вы, я бы немного посмотрел на это, если только вы не собираетесь придерживаться только партии.   -  person NizonRox    schedule 01.02.2016
comment
Вот документация Microsoft по этому файлу: msdn.microsoft.com/en-us/library/windows/desktop/ Не уверен, что вы можете выполнять собственные вызовы API из bash, но я почти уверен, что вы можете из vbscript. Вот соответствующий вызов API: msdn.microsoft.com/en-us/library/windows/desktop/ Обратите внимание, что если вы не предоставите пароль в xml, вам будет предложено ввести его, поэтому, если все остальное не удастся , попросите скрипт ввести его и нажмите Enter   -  person BlackCap    schedule 03.02.2016


Ответы (4)


Вы пытались удалить и повторно добавить профиль вместо того, чтобы просто изменить содержимое XML, чтобы использовать простой пароль?

У меня была аналогичная ситуация в прошлом, и это то, что сработало для меня:

В этом ответе предполагается, что вы хотите сохранить в сети только пароль Wi-Fi вместо полного XML-файла, а SSID Wi-Fi – "My Network".

  1. Отключиться от сети: netsh wlan disconnect
  2. Экспортируйте профиль «Моя сеть» в другое место, например. C:\: netsh wlan export profile folder="C:\" name="My Network" key=clear --> это должно создать C:\Wi-Fi-My Network.xml. Полученный файл xml должен быть похож на тот, который вы видите в C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces, но с незащищенной частью <sharedKey> (это позволяет нам сделать только одну замену на следующем шаге). Очевидно, вы также можете сделать это, скопировав файл из каталога профиля Wlansvc, но для этого требуется знание GUID интерфейса. Экспортировать проще, так как вам нужно знать только свой SSID.
  3. В скопированном профиле убедитесь, что protected равно false, и заполните keyMaterial простым паролем (простая замена текста должна быть легко выполнена с помощью VB или C#, но если вам нужно сделать это исключительно в пакетном сценарии, см. Изменение данных тега в файле XML с помощью пакетного файла Windows< /а>)
  4. Удалить текущий сохраненный профиль: netsh wlan delete profile name="My Network"
  5. Добавьте обратно профиль: netsh wlan add profile filename="C:\Wi-Fi-My Network.xml".
    (При этом будет воссоздан соответствующий файл в C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces с зашифрованным паролем.)
  6. Подключиться к сети: netsh wlan connect name="My Network"

Если вы согласны с сохранением полного XML-файла, вы также можете экспортировать профиль в незашифрованном виде (шаг 2) и сохранить его на сетевом диске, тогда вам просто нужно выполнить шаги 1, 4, 5 и 6.

Надеюсь, это поможет.

person roberto    schedule 28.01.2016
comment
Не могли бы вы объяснить, что делает команда C:\MyProfile.xml: netsh wlan export profile folder="C:\" name="My Network" key=clear? Я предполагаю, что C:\MyProfile.xml следует заменить на C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\{blablabla}\{profilename}.xml. Когда я это делаю, открывается окно Internet Explorer, показывающее содержимое XML-файла. Я думал, что увижу копию файла в корне C:\ , но я этого не вижу. - person James Newton; 29.01.2016
comment
В скопированном профиле измените protected на false и заполните keyMaterial простым паролем ››› Я предполагаю, что мне нужно будет использовать регулярное выражение, чтобы внести это изменение из пакетного сценария. Было бы здорово увидеть полный пакетный скрипт, который обрабатывает все эти шаги. - person James Newton; 29.01.2016
comment
Команда должна начинаться с netsh. Просто забудьте о MyProfile.xml, это остатки моей личной заметки. Я уточнил шаг в редактировании. Надеюсь, теперь стало понятнее? По сути, этот шаг заключается в том, чтобы просто сделать копию текущего профиля вашего профиля Wi-Fi My Network с ключом в открытом виде. - person roberto; 30.01.2016
comment
Что касается второго комментария: да. Для примера см. этот вопрос: пометить данные в xml-файле с помощью пакетного файла Windows"> stackoverflow.com/questions/17054275/ Я использую Windows только на работе, поэтому в данный момент я не могу написать и протестировать полный пакетный скрипт. Если вы не можете заставить его работать, я посмотрю, смогу ли я создать его в понедельник. - person roberto; 30.01.2016

Лучший логический способ, которым я бы уведомил пароль, - сохранить пароль в виде числа и сохранить имя Wi-Fi как + или - «из предыдущего пароля» каждый месяц, таким образом, вы можете уведомить пациентов на один раз, что пароль в следующем месяце будет! :-) пример: предположим, что ваш текущий пароль — 134768, а ваш пароль на следующий месяц — 134778, тогда в начале следующего месяца вы можете переименовать Wi-Fi как +ten.

person Shrikanth Buds    schedule 03.02.2016

Похоже, что "FooBar" задал на форуме, как зашифровать/расшифровать материал ключа, но в этом нет необходимости из того, что я получаю, потому что он упоминает «Я успешно только что скопировал и вставил тестовый один из них между компьютерами, и он отлично подключился, поэтому шифрование определенно обратимо." поэтому я предполагаю, что все, что вам нужно сделать, это:

  1. Введите пароль беспроводной сети на штатном компьютере.
  2. Проверьте, обновляется ли файл xml (если да, то следующий шаг)
  3. Затем поместите его в сеть, к которой может подключиться несколько компьютеров.
  4. C&P файл .xml и перезаписать
  5. Молитесь, чтобы вам не потребовался перезапуск, иначе я бы предположил, что вы можете отключить интернет-драйвер и снова включить его из пакета.

Это мой взгляд на это, но я не могу проверить это сейчас.

person NizonRox    schedule 01.02.2016
comment
Шифрование является обратимым, но обычно только пользователь с теми же учетными данными для входа, что и пользователь, зашифровавший данные, может расшифровать данные, что означает, что невозможно просто скопировать и вставить XML-файл, если keyMaterial все еще зашифрован. (keyMaterial просто зашифрован с помощью CryptProtectData и может быть расшифрован с помощью CryptUnprotectData; см.: msdn.microsoft.com/en-us/library/windows/desktop/ Это довольно просто сделать, например, с помощью VB или C#, но для пакетного файла я думаю, что вызов netsh, вероятно, самый простой в этом случае) - person roberto; 01.02.2016
comment
Другой способ сделать это — nirsoft.net/utils/wireless_key.html имеет командные строки для экспорта в файл .txt, который программа может импортировать с помощью командной строки. но это выглядит как крайняя мера для меня. А CryptProtectData — это C++, но имеет только пакетный тег. - person NizonRox; 01.02.2016
comment
Да, все это довольно просто, если бы не пакетное ограничение. Преимущество netsh в том, что он встроен, поэтому он будет работать только с пакетной обработкой. - person roberto; 01.02.2016
comment
Это очень верно, но я должен иметь в виду, что вы можете запускать программу wireless_key из сети, это упрощает работу, но да, netsh — это то, что вам нужно. Для пакетной обработки было много ограничений, но многие люди нашли умные способы справиться с этим, не переходя на vbs, c, java и т. Д. - person NizonRox; 01.02.2016

Вы также можете написать пакет, который использует

netsh wlan set profileparameter name="SSID" keyMaterial="password"

для обновления XML-документа. Параметр keyMaterial может быть передан через набор переменных из другого .bat или другого файла.

Я разработал этот метод, когда моя местная кофейня решила менять пароль каждый день, и мне надоело говорить Windows 10, чтобы она забыла о сети и снова подключилась.

person Zahir    schedule 30.05.2017