0

所以从机器 X 我用 Creds A 作为 CredSSP 连接到 Y,然后我通过 Cred B,我想用 Cred B 在机器 Y 上开始工作。

虽然我可以将 RDP 作为 X 进入机器 Y,并成功地在本地创建一个作业作为 Y,但当我使用远程处理执行此操作时。我得到一个错误。这是通过问题复制的示例代码

$sb1 = {param($cred) $cred ; write-host "started"  ; start-job  -Credential $cred -ScriptBlock {"yo"} | Wait-Job | Receive-Job }
$j = invoke-command -ComputerName $compy -Credential $creda -Authentication CredSSP -ScriptBlock $sb1 -argumentlist $credb

它在接收作业上出错,大约 30 秒后(可能是超时),我没有看到在任务管理器中创建的任何进程 y(当我在脚本块中使用“yo”只是为了查看时) .

这是返回的错误

[localhost] The background process reported an error with the following message: .
    + CategoryInfo          : OpenError: (:) [Receive-Job], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionStateBroken

异常的扩展是“后台进程报告错误并显示以下消息:。” 并且没有内部异常。

4

2 回答 2

0

要使用 credssp 开关,需要将远程计算机配置为允许它。但是,即使启用,您也不能简单地将凭据对象传递给远程计算机。您可以使用以下代码轻松测试它:

$a="hello world"
Will work: Invoke-Command -ScriptBlock {write-host "hello world"} -session $(get-pssession 2)
Will break: Invoke-Command -ScriptBlock {write-host $a} -session $(get-pssession 2)

您可以做的是使用ConvertFrom-SecureString创建一个安全字符串并将其作为变量传递。

于 2012-05-11T01:29:48.253 回答
0

据我了解,当删除远程脚本中 Start-Job 的 -Credential 参数时,一切顺利。

当我们希望我们的远程会话能够完全访问网络资源时使用 CredSSP。这就是所谓的双重希望情景。

在您的情况下,您在计算机 A 上构建 $credb,此变量包含 B 的凭据,但是当您将 $credb 作为参数提供给远程脚本时,它会被序列化,我敢打赌第二台计算机无法使用凭据的加密部分.

尝试在服务器计算机上重新创建凭据,但它也失败了。

于 2011-09-02T15:49:04.073 回答