0

因此,从机器X我连接到信用A作为CredSSP的Y,然后我通过信用B传递,并且我想用机器Y在机器Y上启动一项工作B.在远程CredSSP调用中启动作业时出现问题

虽然我可以将RDP放入机器Y作为X,并成功创建一个本地作为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上 任何进程(当我用“哟”只是为了看到在scriptblock睡觉)。

这里是回来

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

误差是异常的延伸“后台进程报告了下面的消息的错误:”。没有内在的感觉。

+0

几个问题: 您是否将CredSSP作为客户端在X上委派给Y? 你是否启用CredSSP作为客户端和服务器上的Y 你如何建立$ Creda和$ CredB – JPBlanc

+0

它花了我的时间,但我重现。 – JPBlanc

回答

0

据我所知,当在远程脚本中删除启动作业的-Credential参数时,所有事情都会顺利进行。

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

在你的情况下,你在计算机上建立$ credb这个变量包含B的凭证,但是当你给$ credb作为你的远程脚本的参数时,它是序列化的,我敢打赌,第二台计算机不能使用加密该凭证的一面。

Itry重新创建服务器计算机上的凭据,但它也失败。

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的安全字符串,并把它作为一个变量。