0

したがって、マシン X から CredSSP として Cred A を使用して Y に接続し、次に Cred B を通過し、マシン Y で Cred B を使用してジョブを開始したいと考えています。

X としてマシン Y に RDP できますが、リモートでこれを行うと、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

receive-job でエラーが発生し、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

私が理解している限り、リモートスクリプトでStart-Jobの-Credentialパラメーターを削除すると、すべてがうまくいきます。

CredSSPは、リモートセッションにネットワークリソースへのフルアクセスを許可する場合に使用されます。それがいわゆるダブルホープシナリオです。

コンピューターAで$credbを作成する場合、この変数にはBのクレデンシャルが含まれますが、リモートスクリプトにパラメーターとして$ credbを指定すると、シリアル化され、2番目のコンピューターはクレデンシャルの暗号化されたパーを使用できないに違いありません。 。

サーバーコンピューターでクレデンシャルを再作成しようとしましたが、失敗しました。

于 2011-09-02T15:49:04.073 に答える
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 に答える