Windowsラボ環境をセットアップしています。 Win2012R2ドメインコントローラー(srv001)があり、ドメイン(srv003)に別のWin2012R2サーバーを追加したいと思います。実際には、すべてうまくいきます。新しいサーバーにDCと同じサブネット内の静的IPアドレスを与え、それを正しいDNSサーバーにポイントして、サーバーをドメインに追加しました。
しかし、新しいサーバーをサーバーマネージャーに追加すると、Kerberosエラー0x80090322が発生します。以下に掲載するかなり長いエラーメッセージがあります。私はいくつかのテストを行ったところ、実際にはKerberos認証を使用してサーバーへのリモートPowershellセッションをセットアップできることがわかりました。
$s = New-PSSession -ComputerName srv003 -Authentication Kerberos
$s | Enter-PSSession
ここでは問題ありません。私は走ったEnable-PSRemoting
リモートサーバー上でも問題はありません。
サーバーマネージャーが私の新しいサーバーを気に入ってくれないのはなぜですか?特に、サーバーマネージャが不平を言っているのと同じプロトコルを使用してリモートPowershellを設定することが可能であるためです。
エラーコード0x80090322に属するエラーメッセージ:
次のエラーで構成の更新に失敗しました:次のエラーのため、サーバーからメタデータを取得できませんでした:WinRMは要求を処理できません。Kerberos認証の使用中に、エラーコード0x80090322の次のエラーが発生しました:不明なセキュリティエラー考えられる原因は次のとおりです:
上記の問題を確認した後、以下を試してください:
エラーメッセージの番号付き項目を参照するには:
はい、ようやくわかりました。リモートサーバーのイベントログをもう一度確認しました。次のエラーテキストのエラーが含まれていました。
Kerberosクライアントが受信した KRB_AP_ERR_MODIFIED サーバーsrv003からのエラー。使用されたターゲット名はHTTP/srv003.rwwilden01.localでした。これは、ターゲットサーバーが、クライアント。これは、ターゲットサーバープリンシパル名(SPN)が、ターゲットサービスが使用しているアカウント以外のアカウントに登録されている場合に発生する可能性があります。ターゲットSPNがサーバーで使用されるアカウントにのみ登録されていることを確認してください。このエラーは、ターゲットサービスアカウントのパスワードが、そのターゲットサービスのKerberosキー配布センターで構成されているものと異なる場合。サーバー上のサービスとKDCの両方が同じパスワードを使用するように構成されていることを確認してください。サーバー名が完全に修飾されていない場合、およびターゲットドメイン(RWWILDEN01.LOCAL)がクライアントドメイン(RWWILDEN01.LOCAL)と異なる場合、これら2つのドメインに同じ名前のサーバーアカウントがあるかどうかを確認するか、完全修飾名を使用してサーバーを識別します。
1週間前にSPNで管理されたサービスアカウントを追加したようですHTTP/srv003.rwwilden.local
。サーバーマネージャーがこのターゲット名を最初に試行する理由はわかりませんが、どうしても機能しません。このSPNは実際のサーバーとはほとんど関係がないため、理にかなっています。
サービスアカウントを削除した後、すべてが意図したとおりに機能し始めました。
少し前にこの問題がありましたが、「setspn」ツールを使用して犯人に指摘されました。この記事を読むことで、SPNの理解が深まりました: http://support.Microsoft.com/default.aspx?scid=kb;EN-US;92965
同じエラーが発生し、さまざまな解決策を試しました。助けになったのは、ドメイン名の代わりにexplicit IPv4 addressを使用することでした。
希望する投稿にコメント(新しい求人、新しいアカウント、ポイントなし)を追加できなかったので、返信します。 IPを使用すると問題が解決する理由は、IPを使用するとKerberosが使用されないためです。縁石は、FQDN(またはNBT名が使用されている場合にのみ試行されます。これは、ドメイン名を追加して、とにかくfqdnにするためです)。一般的に言えば、ほとんどのKerberosエラーは、ネーミングOR SPNが設定されていないか、必要なサービスに正しく設定されているためです。厳密な名前チェックをオフにしない限り、Cnameは機能しません。状況によっては機能しないので、少なくとも診断中はそれらに近づかないようにすることをお勧めします。しかし、正直に言って...この種のことを理解するための最善の方法(Windowsログと縁石はあまり役に立たないため)は、Wiresharkを使用することです。 。ネゴシエーションが表示され、失敗の理由、試行の内容などが表示されます。さらに、イベントビューアで「分析およびデバッグ」ログを有効にすると、カーブの追加のデバッグログが表示され、有効にできます。それでも... Wiresharkはいつもあなたの友達のimhoです!
これは、重複するServicePrincipalNamesがある場合に発生する可能性があります。これは有効なシナリオですが、残念ながらWinRMを混乱させます。
たとえば、サービスアカウント「appPoolAccount」とサーバー「myWebServer」を考えてみます。ActiveDirectoryの両方のオブジェクトには、同じ文字列「HTTP/myWebServer」を含むServicePrincipalNameプロパティがあります。 myWebServerのServicePrincipalNameは 'HTTP/myWebServer:5985になるため、少し異なります。
(ほぼ)重複したServicePrincipalNamesが存在すると、WinRMは問題のKerberosエラーで失敗します。
この問題を回避するには、次のように、ServicePrincipalNameを検索するときにポートを含めるようにInvoke-Commandに指示できます。
### Tell WinRM to include the port in the SPN
Invoke-Command -ComputerName myWebServer -ScriptBlock {Get-Process} -SessionOption (New-PSSessionOption -IncludePortInSPN)
私の場合、[〜#〜] not [〜#〜]サーバーが所有するオブジェクトにHTTP/SPNを登録しました。ただし、SETSPN.exeツールはどのコンテナー(またはオブジェクト)がSPNを所有しているかを表示しないため、それを所有しているものを見つけることができませんでした。次のPowerShellスクリプトを使用して、SPNの所有者を見つけました。 SPNを削除し、サーバーを所有者として(SETSPN.exeツールを使用して)SPNを再作成した後、すべてのDCが同期するまで30分待ってから、機能しました。
# Source / credit:
# https://social.technet.Microsoft.com/wiki/contents/articles/18996.active-directory-powershell-script-to-list-all-spns-used.aspx
Clear-Host
$Search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$Search.Filter="(servicePrincipalName=*)"
## You can use this to filter for OU's:
## $Results = $Search.FindAll() | ?{ $_.Path -like '*OU=whatever,DC=whatever,DC=whatever*' }
$Results=$Search.FindAll()
foreach($Result in $Results ) {
$UserEntry=$Result.GetDirectoryEntry()
Write-Host "Object Name = " $UserEntry.name -BackgroundColor "yellow" -ForegroundColor "black"
Write-Host "DN = " $UserEntry.distinguishedName
Write-Host "Object Cat. = " $UserEntry.objectCategory
Write-Host "servicePrincipalNames"
$i=1
foreach($SPN in $UserEntry.servicePrincipalName ) {
Write-Host "SPN(" $i ") = " $SPN
$i++
}
Write-Host ""
}