gpt4 book ai didi

powershell - 为什么我通过 Chef 获得以管理员身份运行 Octopus Tentacle 的 UnauthorizedAccessException?

转载 作者:行者123 更新时间:2023-12-02 23:04:41 25 4
gpt4 key购买 nike

我正在使用 Chef 配置 Windows 2012 Server (RTM),包括安装 Octopus Tentacle 服务,这样我就可以使用 Octopus Deploy 将软件部署到这个实例上。

我的工作站(Chef 客户端)运行的是 Windows 7 x64 SP1。服务器托管在 VMware Workstation 中,并运行 Windows 2012 Server x64 RTM。它是从系统准备的基线镜像启动的,在 Chef 配方尝试创建新的 Octopus 证书之前,一切都运行良好。

octopus.rb Chef 配方包装了一大块 Powershell,实际安装 Octopus Tentacle 的部分如下所示:

$wc = New-Object System.Net.WebClient
$wc.DownloadFile("#{source_path_tanticle}", "#{install_path_tanticle}")
Start-Process -FilePath msiexec -ArgumentList /i, "#{install_path_tanticle}", /quiet -Wait | out-file -filepath C:\\Octopus.log -append
netsh advfirewall firewall add rule name="Octopus" dir=in action=allow protocol=TCP localport=#{tanticle_port} | out-file -filepath C:\\Octopus.log -append

cd "C:\\Program Files (x86)\\Octopus Tentacle\\Agent"
.\\tentacle.exe configure --appdir="C:\\Applications" --port=#{tanticle_port} --trust="#{octopus_server_Thumbprint}" | out-file -filepath C:\\Octopus.log -append
.\\tentacle.exe new-certificate | out-file -filepath C:\\Octopus.log -append
.\\tentacle.exe register-with --server=$octopusServer --publicHostname=$publicDnsName --environment=$environment --role=web --apikey=$octopusServerApiKey | out-file -filepath C:\\Octopus.log -append

当此脚本调用 tentacle.exe new-certificate 时,它会抛出 UnauthorizedAccessException:

Generating and installing a new cetificate...
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at Octopus.Shared.Security.CertificateGenerator.Generate(String fullName, Boolean exportable) in c:\w\e6923628be6eaf72\source\Octopus.Shared\Security\CertificateGenerator.cs:line 25
at Octopus.Tentacle.Commands.NewCertificateCommand.Execute() in c:\w\e6923628be6eaf72\source\Octopus.Tentacle\Commands\NewCertificateCommand.cs:line 31
at Octopus.Shared.Startup.CommandProcessor.Process(String[] args) in c:\w\e6923628be6eaf72\source\Octopus.Shared\Startup\CommandProcessor.cs:line 40

Chef 客户端服务以管理员身份运行(至少,当我将 $env:username 转储到安装过程中创建的 octopus.log 文件时,它说是管理员)所以我不确定 Octopus 的文件/文件夹/资源是什么触手正在尝试访问。

正在运行以引导节点的实际 Chef 命令是:

 knife bootstrap windows winrm 192.168.202.137 -x Administrator -P p@ssw0rd -r 'role[web_server]'

其中 192.168.202.137 是新启动的 Win2012 服务器的 IP 地址,p@ssw0rd 是该服务器上的本地管理员密码。

以管理员身份登录时在服务器上手动运行相同的命令效果很好,所以这与 chef/winrm/powershell 远程处理有关。

一种理论认为,我遇到了某种 DCOM/WinRM 安全边缘案例,因为我在客户端和服务器上运行不同的操作系统(Win7 x64 与 Win2012)——但这里的调用链是 cmd.exe—— > Ruby -> WinRM -> Ruby -> Powershell 我对如何补救甚至验证这样的问题有点迷茫......

最佳答案

当您通过 WinRM 调用 PowerShell 时,是否可能未加载管理员用户的配置文件?你能强制加载用户配置文件吗?

关于powershell - 为什么我通过 Chef 获得以管理员身份运行 Octopus Tentacle 的 UnauthorizedAccessException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com