在 Windows 2022 中通过 ssh 调用 powershell/powercli 脚本时出错

问题描述 投票:0回答:1

在 Windows Server 2022 中通过 ssh 从 Linux 系统调用 powercli 组件执行 powershell 脚本时遇到一个奇怪的问题。 它仅在调用用户通过 VMWare 远程控制台登录到 Windows Server 时有效(我假设通过 RDP 登录也会发生同样的情况,由于防火墙限制而无法尝试),否则它无法与 VMWare ViCenter 建立连接。

我们有一个托管在 Linux 中的 Web 仪表板,操作员可以通过菜单在不同的服务器上启动操作。 其中一项操作在同一服务器中调用 sh,该服务器通过 ssh 与 Windows Server 2022 建立连接。身份验证是通过密钥交换完成的,而不是交互式密码。整个想法是操作员启动命令,然后监视它如何完成。

从现在起,我将把架构的组件称为 LINUX、WINDOWS、VICENTER、USER 等……出于安全考虑,所有这些都不受限制

架构是LINUX(sh)->WINDOWS(ps1)->VICENTER,所有的连接和执行都以USER来进行。

第一个脚本 sh 如下:

#!/bin/bash

# variables
var1=$1
var2=$2

# command
ssh -i /home/apps_consola/.ssh/USER_id_dsa USER@WINDOWS powershell.exe C:\\scripts\\Mover_VM_entre_sitios.ps1 $var1 $var2

其中 $1 是目标站点,$2 是要移动的虚拟机。从dashboard接收,并从sh传到ps1

ps1 启动,它应该与我们的 VMWare VICENTER 连接,并将虚拟机从生产站点移动到应急站点。这就是问题的体现:

  • 如果用户登录到 WINDOWS,该脚本就会发挥作用。如果手动启动也可以正常工作。
  • 如果用户未登录 WINDOWS,脚本会启动,但永远无法与 VICENTER 建立连接。

PS1内部建立WINDOWS与VICENTER的连接如下:

$Credentials = Get-VICredentialStoreItem -Host VICENTER -File C:\Scripts\Cred.xml 
Connect-VIServer VICENTER -User $Credentials.User -Password $Credentials.Password 

Cred.xml 文件是通过 USER 在 WINDOWS 本地使用

New-VICredentialStoreItem -User DOMAIN\USER -Password PASSWORD -Host VICENTER -File Cred.xml
创建的,该用户位于本地管理员组中。

ps1 甚至永远不会取消,我必须手动终止进程才能结束,我得到的错误是:

Get-VICredentialStoreItem : The requested operation cannot be completed. The computer must be trusted for delegation
and the current user account must be configured to allow delegation.
At C:\SCRIPTS\Mover_VM_entre_sitios.ps1:15 char:16
+ ... edentials = Get-VICredentialStoreItem -Host VICENTER -File C:\Scripts ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-VICredentialStoreItem], CryptographicException
+ FullyQualifiedErrorId : Core_GetVICredentialStoreItem_ProcessRecordget,VMware.VimAutomation.ViCore.Cmdlets.Commands.GetVICredentialStoreItem

对于我在网上读到的内容,这可能是凭据双跳的问题,但我尝试了我找到的所有内容,但仍然无法使其工作。

我已经在以用户身份登录的提升的 Powershell 控制台中运行此命令:

enable-wsmancredssp -Role client -DelegateComputer * -Verbose
enable-wsmancredssp -Role server
enable-psremoting

检查

get-wsmancredssp
我得到:

The machine is configured to allow delegating fresh credentials to the following target(s): wsman/*;wsman/*.DOMAIN
This computer is configured to receive credentials from a remote client computer.

我还修改了以下本地策略(通过 gpedit.msc):

Computer Configuration\Windows Settings\Security Settings\Local Policies\User Right Assignments\Enable computer and user accounts to be trusted for delegation: I added the USER

Computer Configuration\Administrative Templates\System\Credentials Delegation\Allow delegating fresh credentials: I enabled it and added LINUX, WINDOWS, VICENTER, wsman/*.DOMAIN and wsman/*

Computer Configuration\Administrative Templates\System\Credentials Delegation\Allow delegating fresh credentials with NTLM-only server authentication:  I enabled it and added LINUX, WINDOWS, VICENTER, wsman/*.DOMAIN and wsman/*

我还了解到,在注册表分支中将 REG_DWORD ProtectionPolicy 设置为 1:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Protect\Providers\df9d8cd0-1501-11d1-8c7a-00c04fc297eb,但问题仍然存在。

我必须提到,我们的相同设置工作得很好,但由于不可恢复的错误,我们丢失了 WINDOWS 组件(旧虚拟机是 win 2012r2)。所描述的情况发生在损坏的虚拟机替换(WINDOWS)中。我不记得在前一个错误中遇到过任何此类错误,因为我记得不需要配置。

有人可以帮忙吗?老实说我没主意了

提前致谢, 卢卡斯DT

powershell vmware powercli
1个回答
0
投票

如果 VICredentialStore(显然依赖于 Windows DPAPI)在 SSH 下运行不佳,也许这个 VMware.VISecret 模块是一个解决方法

https://blogs.vmware.com/PowerCLI/2023/02/managing-vicredentials-on-powershell-7-using-vmware-visecret-module.html

这篇文章似乎与失败相关:“SSH远程会话在客户端用户的上下文中运行。然而,它们是网络登录会话,并且没有附加用户的凭据。DPAPI加密和解密仅适用于交互式登录会话一般(或附加了用户凭据的其他特定登录会话),因为这些 API 实际上使用用户的密码来进行加密和解密。”

编辑:同一线程中的后续评论指出“使用密码身份验证,远程会话具有用户凭据。因此 DPAPI 可以工作”。 VICredentialStore 似乎值得再次尝试密码(而不是密钥)身份验证,至少作为测试。如果失败,使用 psremoting 而不是 ssh 进行另一次测试可能会很有用。

© www.soinside.com 2019 - 2024. All rights reserved.