首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非执行了交互式登录,否则将失败

除非执行了交互式登录,否则将失败
EN

Server Fault用户
提问于 2021-01-06 16:29:43
回答 2查看 1.5K关注 0票数 3

长时间/首个time...Using官方AWSWindows2019AMI(“am-0229f7666f517b31e”在“us-east-1”上),我们旋转一个新实例并通过PowerShell执行一些基本任务(使用"user_data“选项):

  • 开始测井
代码语言:javascript
复制
Start-Transcript -Path "c:\user-data.txt"
  • 更改本地“管理员”密码:
代码语言:javascript
复制
$admin = [adsi]("WinNT://./administrator, user")
$admin.PSBase.Invoke("SetPassword", "${password}")
  • 为Ansible启用/配置WinRM:
代码语言:javascript
复制
$WinRM = Invoke-WebRequest -Proxy http://"${proxy}" -UseBasicParsing https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 | Select-Object -ExpandProperty Content
Invoke-Expression $WinRM
  • 启用RDP:
代码语言:javascript
复制
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
  • 配置主机名:
代码语言:javascript
复制
Rename-Computer -NewName "${name}" -Force
  • 停止伐木:
代码语言:javascript
复制
Stop-Transcript
  • 重新启动计算机(因此应用主机名更改):
代码语言:javascript
复制
Restart-Computer

非常基本的东西,没有什么是我们能看到的问题,并验证了每一项任务是正常工作的。

在这一点上,我们将运行一个Ansible剧本来做一些事情(配置服务、加入域、安装巧克力等等)。但总是失败的任务是Windows部分。

在故障排除过程中,除了使用ansible.windows集合调用Windows之外,我们还从Ansible剧本中删除了所有内容。因此,此时,部署了实例,通过"user_data“运行基本的user_data任务,然后Ansible连接并尝试运行Windows。

Ansible任务本身也是相当基本的:

代码语言:javascript
复制
- name: os - perform windows updates
  win_updates:
    state: installed
    category_names:
    - Application
    - Connectors
    - CriticalUpdates
    - DefinitionUpdates
    - DeveloperKits
    - FeaturePacks
    - Guidance
    - SecurityUpdates
    - ServicePacks
    - Tools
    - UpdateRollups
    log_path: c:\wu-install.log
    reboot: yes
    reboot_timeout: 600

所以,当我们运行时,我们看到了这样的反应:

代码语言:javascript
复制
Failed to search for updates: Exception from HRESULT: 0x80240438

每当我们使用我们想要的workflow...However来尝试它时,我们都会发现,如果我们在Windows任务执行之前交互一次,它就能工作!每次!

我的上一份工作是99.9%的linux,所以我对此有点生疏,但我知道在第一次(交互)登录时会发生一些疯狂的/无文档的事情。我尝试了大量不同的东西(禁用IPv6、运行wsreset.exe、删除Windows注册表项、重新启动等)。根据对错误code...But的研究,我唯一能看到的是,只要我在Windows尝试运行之前交互登录一次,一切都很好。

但很明显,我们不想这样做;)

同样要明确的是:

  • 部署实例(通过"user_data“调整--其中包括重新启动),运行运行Windows任务的Ansible剧本:
代码语言:javascript
复制
Failed to search for updates: Exception from HRESULT: 0x80240438
  • 部署实例(通过"user_data“调整--其中包括重新启动),交互登录(使用RDP),运行运行Windows任务的Ansible剧本:
代码语言:javascript
复制
Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.329.1737.0)

注意:这只是当前的响应,因为AMI只缺少update...So将来可以/应该改变的

另外,这不包括任何域连接或anything...Although,我注意到了类似的模式。如果我使用完整的剧本,只要我在运行Windows任务之前交互地使用域用户登录就可以了。

应该指出,当我以交互方式登录时,我绝对是通过RDP进行nothing...Just登录,然后我不接受任何提示或单击任何内容。

显然,目标是使它不需要手动登录,因为这违背了这个项目的主要目的。所以我的问题是:

  • 有人知道WTF正在发生吗?!?是否有一种方法来模拟/复制交互登录功能的任何更改?我搜过原木,但没看到任何明显的东西。
  • 假设我不能用“正确”的方式修复它,那么对于如何使用Ansible来执行交互式登录,有什么想法吗?我认为有一个可以交互登录的任务,然后是另一个记录它为out...Messy的任务,但不能一直在这上面浪费时间。"user_data“的调整也会奏效。

在这一点上我们愿意尝试任何事情,我唯一能说的就是我们不能改变所使用的AMI (除了将它更新到最新的版本之外),并且需要实现"user_data“过程的最终结果(但如果这是问题的话,可以通过其他方式进行)。存在一个代理,但我不认为这是一个因素,因为问题的根源似乎是交互登录。

EN

回答 2

Server Fault用户

发布于 2021-02-16 05:24:18

我以前也有过这个问题。不确定修复程序,但是需要为ansible用户配置自动登录。重新启动实例。运行更新,然后删除自动登录。

非常糟糕的工作,我的是一个封隔器图像创建的一部分,所以我只需添加自动登录,然后删除更新。

票数 2
EN

Server Fault用户

发布于 2021-03-09 23:14:55

fwiw,我打开了一份关于这方面的错误报告:

https://github.com/ansible-collections/ansible.windows/issues/193

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1048827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档