Генерация пароля для обобщенного Windows экземпляра сервера на OCI - PullRequest
0 голосов
/ 29 апреля 2020

Насколько я понимаю, серверные образы Oracle по умолчанию *1040* используют Cloudbase-Init вместе с файлом Unattend. xml для генерации пароля для пользователя, но мне любопытно узнать о специфике этого, поскольку я пытаясь создать свои собственные изображения с предварительно установленным дополнительным программным обеспечением. Я хочу сгенерировать случайный пароль и явно не требовать от пользователя его изменения . С учетом сказанного, вот что я попробовал (я включил только обобщающую часть Unattend. xml файлов):

Попытка # 1

Для моего первого Попытка, я приложил все усилия, чтобы подражать тому, что я мог (насколько я знаю) сказать, что изображения по умолчанию делали. Это те же файлы конфигурации unattend и cloubase, которые извлечены из обобщенного экземпляра с использованием стандартного образа Oracle Windows 2019. При их использовании пользователю предлагается изменить свой пароль при входе в систему.

Unattend. xml

  <settings pass="generalize">
    <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
    </component>
    <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <RunSynchronous>
        <RunSynchronousCommand wcm:action="add">
          <Order>1</Order>
          <Path>cmd.exe /c ""c:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Scripts\cloudbase-init.exe" --config-file "c:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf" &amp;&amp; exit 1 || exit 2"</Path>
          <Description>Run Cloudbase-Init to set the hostname</Description>
          <WillReboot>OnRequest</WillReboot>
        </RunSynchronousCommand>
      </RunSynchronous>
    </component>
  </settings>

cloudbase-init-unattend.conf

[DEFAULT]
username=opc
groups=Administrators
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
verbose=true
debug=true
logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
logfile=cloudbase-init-unattend.log
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
logging_serial_port_settings=COM1,9600,N,8
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService
plugins=cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
allow_reboot=false
stop_service_on_exit=false
check_latest_version=false

Попытка # 2

Для моей второй попытки я попытался добавить в файл автоматической установки команду, из-за которой пользователю не предлагается менять свой пароль. Я использовал те же файлы конфигурации cloubase, что и при попытке № 1. После обобщения пользователю все равно предлагалось выбрать новый пароль.

Unattend. xml

  <settings pass="generalize">
    <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
    </component>
    <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <RunSynchronous>
        <RunSynchronousCommand wcm:action="add">
          <Order>1</Order>
          <Path>cmd.exe /c "net user opc /logonpasswordchg:no &amp;&amp; exit 1 || exit 2</Path>
          <Description>Ensure the opc user does not have to reset their password</Description>
          <WillReboot>Never</WillReboot>
        </RunSynchronousCommand>
        <RunSynchronousCommand wcm:action="add">
          <Order>2</Order>
          <Path>cmd.exe /c ""c:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Scripts\cloudbase-init.exe" --config-file "c:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf" &amp;&amp; exit 1 || exit 2"</Path>
          <Description>Run Cloudbase-Init to set the hostname</Description>
          <WillReboot>OnRequest</WillReboot>
        </RunSynchronousCommand>
      </RunSynchronous>
    </component>
  </settings>

Попытка # 3

Для В своей третьей попытке я изменил порядок команд в файле Unattend так, что пользователю net было приказано не изменять свой пароль при входе в систему после обработки конфигурации init в cloudbase. Я снова использовал те же файлы конфигурации cloubase, что и при попытке № 1 и № 2. После обобщения пользователю все еще предлагалось выбрать новый пароль.

Unattend. xml

  <settings pass="generalize">
    <component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
    </component>
    <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <RunSynchronous>
        <RunSynchronousCommand wcm:action="add">
          <Order>1</Order>
          <Path>cmd.exe /c ""c:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Scripts\cloudbase-init.exe" --config-file "c:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf" &amp;&amp; exit 1 || exit 2"</Path>
          <Description>Run Cloudbase-Init to set the hostname</Description>
          <WillReboot>OnRequest</WillReboot>
        </RunSynchronousCommand>
        <RunSynchronousCommand wcm:action="add">
          <Order>2</Order>
          <Path>cmd.exe /c "net user opc /logonpasswordchg:no &amp;&amp; exit 1 || exit 2</Path>
          <Description>Ensure the opc user does not have to reset their password</Description>
          <WillReboot>Never</WillReboot>
        </RunSynchronousCommand>
      </RunSynchronous>
    </component>
  </settings>

Ни один из этих подходов не дал того, что я искал. Я также попытался использовать плагин в Cloudbase-Init для генерации пароля, но, похоже, облачный агент Oracle это переопределил, поскольку я был полностью не в состоянии войти через RDP, тогда как без использования плагина Cloudbase я мог войти, но был Невозможно получить доступ к рабочему столу до установки нового пароля.

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

Буду признателен за любые предложения, которые могут быть у кого-либо, или за примеры реализации, созданные другими. Спасибо!

1 Ответ

0 голосов
/ 02 мая 2020

Хотя мне не удалось получить файл Unattend. xml для автоматического запуска моей команды, оказалось, что самым простым решением было использование пользовательских данных Cloudbase-Init для предоставления моей команды. Окончательный сценарий пользовательских данных в итоге выглядел так:

rem cmd
net user opc /logonpasswordchg:no

Надеюсь, это поможет любому, кто найдет этот вопрос в будущем.

...