PowerShellでCredSSP認証を機能させることができない


10

リモート処理を使用してPowerShellスクリプトを作成しようとすると、ダブルホップの問題だと私が思いました。その記事では、Perrimanが問題の簡潔な説明と問題を解決するための具体的な手順を示しています(コマンドを知っていればほとんど簡単ですが、私のようなあまり知られていない人にとっては、その情報は非常に貴重です!)。

私は走ったEnable-WSManCredSSP Server事件のない私のWin7のサーバー上ではなく、実行しようとEnable-WSManCredSSP Client –DelegateComputer <FQDN of the server>、このエラーが発生し、私のWin7のクライアント上で:

Enable-WSManCredSSP : The client cannot connect to the destination specified
in the request. Verify that the service on the destination is running and
is accepting requests.
Consult the logs and documentation for the WS-Management service running
on the destination, most commonly IIS or WinRM. If the destination
is the WinRM service, run the following com mand on the destination
to analyze and configure the WinRM service: "winrm quickconfig".

winrm quickconfigを実行すると、サーバーでWinRMが実行されていることが確認されました。

WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.

そして、Get-WSManCredSSPは、サーバーがクライアントからの資格情報を受け入れる準備ができていることを確認しました。

The machine is not configured to allow delegating fresh credentials.
This computer is configured to receive credentials from a remote client computer.

私はまた、WinRMに関する Boessenの記事を見つけました。彼は一般的なWinRMセットアップについて説明しており、診断に役立つデータポイントを取得するためのヒントを1つ見つけました。クライアントで実行されるこのコマンドは、winrsツールを使用してサーバーにリモートアクセスします。

winrs -r:http://<FQDN of my server>:5985 -u:<myDomain>\msorens "dir c:\"

そのコマンドは、予期した結果、サーバー上のルートディレクトリの内容を問題なく返し、FQDNが正しく、WinRMが有効になっていることを確認しました。

Boessenは、ポート5985がWin7のデフォルトであることを示しています。サーバーで実行されるこのコマンドは、5985の値を確認します。

get-item wsman:\localhost\listener\listener*\port

質問:クライアント側でEnable-WSManCredSSPコマンドを実行できないのはなぜですか?


2011.06.07アップデート

私は上記の質問に対する解決策を見つけた:呼び出し-PSRemotingを有効にすると、コンピュータを構成するために宣伝受け取るリモートコマンドを、許可有効-WSManCredSSPを正常に動作するクライアントで!好奇心旺盛ですが、そのmanページには、さまざまなアクションが実行されることが示されています。

しかし、CredSSP認証を使用しようとしたときに別の障害に到達しました。コマンドは次のとおりです。

Invoke-Command { Write-Host "hello, world" } -computername $serverName `
-credential $testCred  -Authentication Credssp

そしてここに応答があります:

リモートサーバーへの接続が次のエラーメッセージで失敗しました:
WinRMクライアントは要求を処理できません。コンピュータポリシーでは許可されていません
ターゲットコンピュータへのユーザー資格情報の委任。gpedit.mscを使用する
そして、次のポリシーを見てください:コンピュータの構成
->管理用テンプレート->システム->資格情報の委任
->新しい資格情報の委任を許可します。有効であることを確認し、
ターゲットコンピュータに適したSPNで構成されます。例えば、
ターゲットコンピュータ名「myserver.domain.com」の場合、SPNは次のいずれかになります。
以下:WSMAN /myserver.domain.comまたはWSMAN / *。domain.com。
詳細については、about_Remote_Troubleshootingヘルプトピックを参照してください。

この非常に役立つエラーメッセージが示唆するように、設定を確認しましたが、適切に構成されているように見えます。

新しい質問:このCredSSPでのリモート接続試行は何が失敗しますか?


回答の際は、次の点に留意し てください。ここで私が何をしているのかを理解していることは、事前に払拭しましょう。


MSを変更するためにMSが物事を変更するもう1つの厄介な例!! ライブマイグレーションなどには興味がありません。所有している3つのHyper-V 2012サーバーにログインし、それらのサーバー上でVMを作成/削除/開始/停止/再起動できるようにしたいだけです。私のWIn7デスクトップ、今は勝利10です。以前は簡単であったことをするために、フープを左と中央にジャンプする必要があります。現在、Windows 10は私に血まみれの狂気を
引き起こし

回答:


8

私は短い休止期間の後にこれに戻って、新鮮な目(私の同僚と同僚の両方)でもう一度見て、再び基本に戻ることにしました。

クライアントで(管理者シェルで)実行しました:

enable-wsmancredssp -role client -delegatecomputer devremvm03 -force

私が実行したサーバーで(管理者シェルで):

enable-wsmancredssp -role server -force

どちらも、CredSSPが「true」であることを示す通常の出力を返しました。

次に、次のエクササイザコードを使用して、複雑さのレベルを上げていきました。

$block = {
  Write-Host ("hello, world: {0}, {1}" -f $env:USERNAME, (hostname))
}
$username = "test_user"
$password = "..."   
$adjPwd = $password | ConvertTo-SecureString -asPlainText -Force
$testCred = (New-Object System.Management.Automation.PSCredential($username,$adjPwd))    

switch ($choice)
{
  "basic"       { Invoke-Command $block }
  "remote"      { Invoke-Command $block -computername $serverName }
  "credentialA" { Invoke-Command $block -computername $serverName -credential $testCred  }
  "credentialB" { Invoke-Command $block -computername $serverName -credential $testCred  -Authentication Credssp}
  "session"     { 
      $testSession = New-PSSession -computername $serverName -credential $testCred -Authentication Credssp
      if ($testSession) { Invoke-Command $block -Session $testSession; Remove-PSSession $testSession }
      }
}

これらすべてが私のrun.ps1スクリプトにあるため、トランスクリプトは次のようになりました(これは管理者シェルで実行されました)。

PS C:\> .\run.ps1 basic
hello, world: msorens, MyLocalMachine
PS C:\> .\run.ps1 remote MyRemoteServer
hello, world: msorens, MyRemoteServer
PS C:\> .\run.ps1 credentialA MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 credentialB MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 session MyRemoteServer
hello, world: test_user, MyRemoteServer

以前は、basic、remote、credentialAのみが機能していました。これで5つすべてが動作します。ふew!


CredSSPは良いソリューションですか?Microsoftは次のように述べています:注意:ユーザーの資格情報がリモートコンピューターに渡されて認証される資格情報セキュリティサービスプロバイダー(CredSSP)認証は、リモートネットワーク共有へのアクセスなど、複数のリソースで認証を必要とするコマンド用に設計されています。このメカニズムにより、リモート操作のセキュリティリスクが増加します。リモートコンピューターが侵害された場合、リモートコンピューターに渡される資格情報を使用して、ネットワークセッションを制御できます。
Kiquenet

2

私がこれをしなければならなかったとき、これはそれを機能させるために私がやったことです(いくつかのGPO設定もあったかもしれませんが、それらをカバーしているようです)。

クライアントがCredSSPを使用してドメイン内の任意のマシンに接続できるようにするには:

Enable-WSManCredSSP -Role Client -DelegateComputer "*.my.domain.com" -Force | out-null
#the following is used because -delegatecomputer (above) doesn't appear to actually work properly.
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults\AllowFreshCredentialsDomain -Name WSMan -Value "WSMAN/*.my.domain.com"

次に、各ターゲットマシン(サーバー)で以下を実行して、CredSSP認証を有効にしました。

Connect-WSMan -ComputerName $computer 
Set-Item "WSMAN:\$computer\service\auth\credssp" -Value $true 

もちろん、これには、適切な権限でスクリプトを実行している必要があります。これは私にとってはうまくいきました。


提案をありがとうございますが、それでも同じ結果で失敗しました。
Michael Sorens、2011

これが違いをもたらすかどうかはわかりませんが、私の元の投稿は誤解を招く可能性があります。これらのコマンドはすべて、CLIENTマシンから実行しました。したがって、上記の2番目のコードブロックの "$ computer"は、TOに接続しようとしたサーバーの名前です。
jbsmith 2011

サーバーがクライアントのアプリオリな知識を持っている必要があることは意味をなさなかったので、私は多少それを理解していました。念のため、シーケンス全体をもう一度再実行したところ、同じエラーで失敗しました。もう1つのバリエーション:-Authenticationパラメーターを省略し、ステートメントの他のすべてが機能することを確認しました(Invoke-Command { Write-Host "hello, world" } -computername $serverName -credential $testCred)。したがって、CredSSP認証が厳密に問題です。
Michael Sorens、2011

同意-基本的なWinRMは問題ない; 正確な問題はわかりませんが、「新しい資格情報を許可する」ポリシーと設定したSPNに関連していると思います。私はそのポリシー設定を詳しく見て、おそらくもう少し深く掘り下げて、Kerberosが正しく機能していることを確認します。このリンクは参考になると思われます:[リンク] msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx
jbsmith

Connect-WSMan to Serverを使用するのはなぜですか、enable-wsmancredssp -role serverを使用するほうがいいのではないですか?
Kiquenet

1

あるHyper-v 2012R2サーバーから別のサーバーにVMをライブマイグレーションできる場所を取得しましたが、元に戻すことはできませんでした。(ドメインコントローラーとしてSAMBA 4.2を使用しようとしていますが、Samba4では制約付き委任を使用できなかったため、CredSSPでライブマイグレーションできるかどうかを確認したいと考えていました)。

最終的に、私は作業中のhyper-vに移動し、hklm:\ SOFTWARE \ Policies \ Microsoft \ Windows \ CredentialsDelegationにあるレジストリエントリを作業していないhyper-vにコピーしました。その後、両方の方法でうまくいきました。


レジストリツリーのコピーも私にとってはうまくいきました。hklm:\ SOFTWARE \ ... \ CredentialsDelegationノードは存在せず、値はhklm:\ SOFTWARE \ Wow6432Node \ ... \ CredentialsDelegationとHKEY_USERS \ ... \ Group Policy Objects \ ... \ CredentialDelegationに格納されていました。
Der_Meister 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.