如何为本地Powershell使用添加用户? (Jenkins和localhost用户假冒?)

时间:2014-02-10 17:46:43

标签: linux windows powershell scripting jenkins

我有一台运行构建的Jenkins机器,但是我希望在我的Jenkins从属服务器上作为操作系统的替代用户运行脚本。

我可以在我的GNU / Linux机器上使用对称键和ssh中的authorized_keys执行此操作,但在某些Windows机器上执行相同操作时遇到很多麻烦。

我想使用Powershell来运行我感兴趣的命令。

我希望运行特定命令的用户收到Access Denied错误。我可以使用Invoke-Command使用AD管理帐户运行Get-Credential,它可以正常运行,但不能像其他AD用户一样运行,因此我知道winrm正在运行。

如何添加特定AD用户以在特定主机上运行Invoke-CommandEnter-PSSession

与该问题相关,AD管理员如何访问运行winrm的任何计算机?我可以在某种程度上为目标机器上的一个用户本地模拟吗?

2 个答案:

答案 0 :(得分:1)

如果您要对this进行身份验证,那么您需要为每个身份验证用户导出一个新文件,并在密码更改后:

read-host -assecurestring | convertfrom-securestring | out-file UserOneSecureString.txt

我会用about_remoteabout_remote_troubleshooting的文档向您提出问题的更一般部分,您可能已经看过了。

答案 1 :(得分:0)

经过一番阅读后,这个问题可以减少到Impersonating a domain user on a host in Powershell non-interactively.

以非交互式方式在Powershell中模拟主机上的域用户

要以非交互方式在PowerShell中模拟用户,您必须执行以下操作:

  1. 启用Powershell Remoting
  2. 将用户添加到PowerShell PSSessionConfiguration
  3. 在主机上启用CredSSP(作为客户端和服务器)
  4. 导出域用户的非对称密钥
  5. 使用Credssp身份验证启动会话
  6. 启用Powershell Remoting

    我们将使用的主机需要启用Windows远程管理,有一个powershell命令可以为您完成所有工作。

    Enable-PSRemoting -Force

    将用户添加到PowerShell PSSessionConfiguration

    如果用户不是主机的管理员,则必须将其添加到Powershell会话配置中。然后,您可以控制要为该主机上的用户提供哪种访问权限。

    Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI

    在主机上启用CredSSP(作为客户端和服务器)

    Credssp处理微软产品上的double-hop or second-hop issue

    这允许用户进行凭据转发,以访问可能不在本地主机上的服务,例如网络共享。

    在许多情况下,从机器A登录到机器B并在机器C上需要资源时,这是一个问题。

    在这种情况下,机器A和B是同一主机,因此我们在主机上启用Credssp作为ClientServer角色。

    Enable-WSManCredSSP -Role Client -Delegate $env:COMPUTERNAME

    Enable-WSManCredSSP -Role Server

    导出域用户的非对称密钥

    在#am; noam'的答案中提到了这一点。

    可以通过将域用户的密码导出到文件来使用非对称密钥。

    然后,可以读取文件并在主机上启动新的PowerShell会话。

    Read-Host -AsSecureString "Write the password: " | ConvertFrom-SecureString | Out-File C:\somelocation\users-pass-key-file.txt

    使用Credssp身份验证启动会话

    现在,您可以通过使用密钥读取文件并登录主机来启动Powershell中的非交互式登录会话。

    $user = "DOMAIN\username"
    $passkey = Get-Content C:\somelocation\users-pass-key-file.txt | ConvertTo-SecureString
    $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$passkey
    Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { Write-Output $env:USERNAME } -Credential $credential -Authentication Credssp
    

    将Jenkins与模拟用户一起使用

    完成上述步骤后,您可以使用Jenkins从站或master来代表其他用户执行Powershell命令。

    这必须通过使用相关主机上存储的凭据以适当的前言运行Invoke-Command来完成。