リモート デスクトップ接続の一般的なトラブルシューティング

仮想オペレーターを試す - RD セッションの接続に関する一般的な問題をすばやく特定、解決するのに役立ちます

リモート デスクトップ クライアントがリモート デスクトップに接続できず、しかし原因の特定に役立つメッセージや他の症状が提供されない場合は、以下の手順を使用します。

RDP プロトコルの状態を確認する

ローカル コンピューターで RDP プロトコルの状態を確認する

ローカル コンピューターで RDP プロトコルの状態を確認および変更するには、「リモート デスクトップを有効にする方法」をご覧ください。

注意

リモート デスクトップのオプションを利用できない場合は、「ローカル コンピューターでグループ ポリシー オブジェクト (GPO) が RDP をブロックしているかどうかを確認する」をご覧ください。

リモート コンピューターで RDP プロトコルの状態を確認する

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護のために、レジストリを変更する前にバックアップし、問題が発生した場合に復元できるようにします。 レジストリのバックアップと復元方法の詳細は、「Windows のレジストリのバックアップおよび復元の方法」を参照してください。

リモート コンピューターで RDP プロトコルの状態を確認して変更するには、ネットワーク レジストリ接続を使います。

  1. 最初に、 [スタート] メニューに移動し、 [ファイル名を指定して実行] を選択します。 表示されるテキストボックスに「regedt32」と入力します。

  2. レジストリ エディターで、 [ファイル][ネットワーク レジストリへの接続] の順に選択します。

  3. [コンピューターの選択] ダイアログ ボックスで、リモート コンピューターの名前を入力し、 [名前の確認] を選択してから、 [OK] を選択します。

  4. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Serverに移動し、HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Servicesに移動します。

    fDenyTSConnections エントリを示すレジストリ エディターのスクリーンショット。

    • fDenyTSConnections キーの値が 0 の場合、RDP は有効になっています。
    • fDenyTSConnections キーの値が 1 の場合、RDP は無効になっています。
  5. RDP を有効にするには、fDenyTSConnections の値を 1 から 0 に変更します。

ローカル コンピューターでグループ ポリシー オブジェクト (GPO) が RDP をブロックしているかどうかを確認する

ユーザー インターフェイスで RDP を有効にできない場合、または変更した後で fDenyTSConnections の値が 1 に戻る場合は、GPO によってコンピューター レベルの設定がオーバーライドされている可能性があります。

ローカル コンピューターでグループ ポリシーの構成を確認するには、管理者としてコマンド プロンプト ウィンドウを開き、次のコマンドを入力します。

gpresult /H c:\gpresult.html

このコマンドの終了後、gpresult.html を開きます。 [コンピューターの構成] \ [管理用テンプレート] \ [Windows コンポーネント] \ [リモート デスクトップ サービス] \ [リモート デスクトップ セッション ホスト] \ [接続] で、[ユーザーがリモート デスクトップ サービスを使ってリモート接続することを許可する] ポリシーを探します。

  • このポリシーの設定が [有効] である場合、グループ ポリシーでは RDP 接続はブロックされていません。

  • このポリシー設定が [無効] である場合は、 [優勢な GPO] を確認します。 これが、RDP 接続をブロックしている GPO です。

    ドメイン レベルの GPO ブロック RDP が RDP を無効にしているgpresult.htmlのセグメントの例のスクリーンショット。

    ローカル グループ ポリシーが RDP を無効にしているgpresult.htmlのセグメント例のスクリーンショット。

リモート コンピューターで GPO によって RDP がブロックされているかどうかを確認する

リモート コンピューターでグループ ポリシーの構成を確認するためのコマンドは、ローカル コンピューターの場合とほぼ同じです。

gpresult /S <computer name> /H c:\gpresult-<computer name>.html

このコマンドによって生成されるファイル (gpresult-<<コンピューター名>>.html) では、ローカル コンピューター バージョン (gpresult.html) と同じ情報の形式が使われます。

ブロックしている GPO を変更する

グループ ポリシー オブジェクト エディター (GPE) およびグループ ポリシー管理コンソール (GPM) で、これらの設定を変更することができます。 グループ ポリシーの使い方について詳しくは、「Advanced Group Policy Management」(高度なグループ ポリシーの管理) をご覧ください。

ブロックしているポリシーを変更するには、次のいずれかの方法を使います。

  • GPE で、適切なレベルの GPO (ローカル、ドメインなど) にアクセスし、 [コンピューターの構成]>[管理用テンプレート]>[Windows コンポーネント]>[リモート デスクトップ サービス]>[リモート デスクトップ セッション ホスト]>[接続]>[ユーザーがリモート デスクトップ サービスを使ってリモート接続することを許可する] に移動します。
    1. ポリシーを [有効] または [未構成] に設定します。
    2. 影響を受けるコンピューターで、管理者としてコマンド プロンプト ウィンドウを開き、 gpupdate /force コマンドを実行します。
  • GPM で、影響を受けるコンピューターにブロック ポリシーを適用している組織単位 (OU) に移動し、OU からこのポリシーを削除します。

RDP サービスの状態を確認する

ローカル (クライアント) コンピューターとリモート (ターゲット) コンピューターの両方で、次のサービスが実行されている必要があります。

  • リモート デスクトップ サービス (TermService)
  • リモート デスクトップ サービス ユーザー モード ポート リダイレクター (UmRdpService)

サービス MMC スナップインを使って、ローカル環境またはリモート環境のサービスを管理できます。 PowerShell を使用して、ローカル環境またはリモート環境 (リモート PowerShell コマンドレットを受け付けるようにリモート コンピューターが構成されている場合) のサービスを管理することもできます。

サービス MMC スナップインのリモート デスクトップ サービスのスクリーンショット。

いずれかのコンピューターで、1 つまたは両方のサービスが実行されていない場合は、開始します。

Note

リモート デスクトップ サービスを開始する場合は、 Yes を選択して、リモート デスクトップ サービス UserMode ポート リダイレクター サービスを自動的に再起動します。

RDP リスナーが機能していることを確認する

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護のために、レジストリを変更する前にバックアップし、問題が発生した場合に復元できるようにします。 レジストリのバックアップと復元方法の詳細は、「Windows のレジストリのバックアップおよび復元の方法」を参照してください。

RDP リスナーの状態を確認する

この手順では、管理者アクセス許可を持つ PowerShell インスタンスを使います。 ローカル コンピューターでは、管理者アクセス許可を持つコマンド プロンプトを使うこともできます。 ただし、この手順では、ローカルとリモートの両方で同じコマンドレットが動作するため、PowerShell を使います。

  1. リモート コンピューターに接続するために、次のコマンドレットを実行します。

    Enter-PSSession -ComputerName <computer name>
    
  2. qwinsta」と入力します。

    コンピューターのポートでリッスンしているプロセスを一覧表示する qwinsta コマンドのスクリーンショット。

  3. 一覧に状態が Listenrdp-tcpが含まれている場合、RDP リスナーは動作しています。 「RDP リスナー ポートを確認する」に進んでください。 それ以外の場合は、手順 4 に進みます。

  4. 動作中のコンピューターから RDP リスナーの構成をエクスポートします。

    1. 影響を受けるコンピューターと同じバージョンのオペレーティング システムが搭載されているコンピューターにサインインし、そのコンピューターのレジストリにアクセスします (たとえば、レジストリ エディターを使用)。

    2. 次のレジストリ エントリに移動します。

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

    3. エントリを .reg ファイルにエクスポートします。 たとえば、レジストリ エディターでエントリを右クリックし、 [エクスポート] を選択してから、エクスポートされる設定のファイル名を入力します。

    4. エクスポートした .reg ファイルを影響を受けるコンピューターにコピーします。

  5. RDP リスナーの構成をインポートするには、影響を受けるコンピューターで管理者アクセス許可を持つ PowerShell ウィンドウを開きます (または、PowerShell ウィンドウを開き、影響を受けるコンピューターにリモート接続します)。

    1. 既存のレジストリ エントリをバックアップするには、次のコマンドレットを入力します。

      cmd /c 'reg export "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp" C:\Rdp-tcp-backup.reg'
      
    2. 既存のレジストリ エントリを削除するには、次のコマンドレットを入力します。

      Remove-Item -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp' -Recurse -Force
      
    3. 新しいレジストリ エントリをインポートしてサービスを再起動するには、次のコマンドレットを入力します。

      cmd /c 'regedit /s c:\<filename>.reg'
      Restart-Service TermService -Force
      

      <filename>エクスポートされた.reg ファイルの名前に置き換えます。

  6. 再びリモート デスクトップ接続を試みて、構成をテストします。 まだ接続できない場合は、影響を受けるコンピューターを再起動します。

  7. それでも接続できない場合は、RDP の自己署名証明書の状態を確認します。

RDP の自己署名証明書の状態を確認する

  1. まだ接続できない場合は、証明書 MMC スナップインを開きます。 管理する証明書ストアの選択を求めるメッセージが表示されたら、 [コンピューター アカウント] を選択し、影響を受けるコンピューターを選択します。
  2. [証明書] フォルダーの [リモート デスクトップ] で、RDP 自己署名証明書を削除します。
  3. 影響を受けるコンピューターで、リモート デスクトップ サービスのサービスを再起動します。
  4. 証明書スナップインを最新の情報に更新します。
  5. RDP 自己署名証明書が再作成されていない場合は、MachineKeys フォルダーのアクセス許可を確認します。

MachineKeys フォルダーのアクセス許可を確認する

  1. 影響を受けるコンピューターでエクスプローラーを開き、C:\ProgramData\Microsoft\Crypto\RSA\ に移動します。
  2. MachineKeysを右クリックし、Properties>Security>Advanced を選択します。
  3. 次のアクセス許可が構成されていることを確認します。
    • Builtin\Administrators: フル コントロール
    • Everyone: Read, Write

RDP リスナー ポートを確認する

ローカル (クライアント) コンピューターとリモート (ターゲット) コンピューターの両方で、RDP リスナーがポート 3389 でリッスンしている必要があります。 他のアプリケーションがこのポートを使っていてはなりません。

重要

このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 したがって、次の手順を注意深く実行してください。 保護のために、レジストリを変更する前にバックアップし、問題が発生した場合に復元できるようにします。 レジストリのバックアップと復元方法の詳細は、「Windows のレジストリのバックアップおよび復元の方法」を参照してください。

RDP ポートを確認または変更するには、レジストリ エディターを使います。

  1. [スタート] メニューに移動し、 [ファイル名を指定して実行] を選択して、表示されるテキストボックスに「regedt32」と入力します。

    • リモート コンピューターに接続するには、 [ファイル][ネットワーク レジストリへの接続] の順に選択します。
    • [コンピューターの選択] ダイアログ ボックスで、リモート コンピューターの名前を入力し、 [名前の確認] を選択してから、 [OK] を選択します。
  2. レジストリを開き、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\<listener>に移動します。

    RDP プロトコルの PortNumber サブキーのスクリーンショット。

  3. PortNumber の値が 3389 以外の場合は、3389 に変更します。

    重要

    別のポートを使ってリモート デスクトップ サービスを動作させることができます。 ただし、このようにすることはお勧めしません。 この記事では、その種類の構成のトラブルシューティング方法については説明しません。

  4. ポート番号を変更した後、リモート デスクトップ サービスのサービスを再起動します。

別のアプリケーションが同じポートを使おうとしていないことを確認する

この手順では、管理者アクセス許可を持つ PowerShell インスタンスを使います。 ローカル コンピューターでは、管理者アクセス許可を持つコマンド プロンプトを使うこともできます。 ただし、この手順では、ローカルとリモートで同じコマンドレットが動作するため、PowerShell を使います。

  1. PowerShell ウィンドウを開きます。 リモート コンピューターに接続するには、「 Enter-PSSession -ComputerName <computer name>」と入力します。

  2. 次のコマンドを入力します。

    cmd /c 'netstat -ano | find "3389"'
    

    ポートとそのリッスンしているサービスの一覧を生成する netstat コマンドのスクリーンショット。

  3. 状態が「LISTENING」の TCP ポート 3389 (または割り当てられた RDP ポート) のエントリを探します。

    注意

    そのポートを使用しているプロセスまたはサービスのプロセス ID (PID) が、[PID] 列の下に表示されます。

  4. ポート 3389 (または、割り当てられている RDP ポート) を使っているアプリケーションを確認するには、次のコマンドを入力します。

    cmd /c 'tasklist /svc | find "<pid listening on 3389>"'
    

    特定のプロセスの詳細を報告するタスクリスト コマンドのスクリーンショット。

  5. ( netstat 出力から) ポートに関連付けられている PID 番号のエントリを探します。 その PID に関連付けられているサービスまたはプロセスが、右側の列に表示されます。

  6. リモート デスクトップ サービス (TermServ.exe) 以外のアプリケーションまたはサービスがポートを使用している場合は、次のいずれかの方法を使用して競合を解決できます。

    • 他のアプリケーションまたはサービスを、別のポートを使うように構成します (推奨)。
    • 他のアプリケーションまたはサービスをアンインストールします。
    • 別のポートを使うように RDP を構成した後、リモート デスクトップ サービスのサービスを再起動します (推奨されません)。

ファイアウォールで RDP ポートがブロックされているかどうかを確認する

psping ツールを使用して、ポート 3389 を使用して影響を受けるコンピューターに到達できるかどうかをテストします。

  1. 影響を受けない別のコンピューターに移動し、 pspingをダウンロードします。

  2. 管理者としてコマンド プロンプト ウィンドウを開き、 pspingインストールしたディレクトリに移動し、次のコマンドを入力します。

    psping -accepteula <computer IP>:3389
    
  3. psping コマンドの出力で、次のような結果が得られます。

    • Connecting to \<computer IP\>: リモート コンピューターに到達可能です。
    • (0% loss): 接続の試行がすべて成功しました。
    • The remote computer refused the network connection: リモート コンピューターに到達できません。
    • (100% loss): 接続の試行がすべて失敗しました。
  4. 複数のコンピューターで psping を実行して、影響を受けるコンピューターに接続する機能をテストします。

  5. 影響を受けるコンピューターによって、他のすべてのコンピューターからの接続がブロックされるか、他のコンピューターの一部がブロックされるか、または他のコンピューターの 1 つだけかに注意してください。

  6. 推奨される次の手順は次のとおりです。

    • ネットワーク管理者と協力して、影響を受けるコンピューターへの RDP トラフィックがネットワークで許可されることを確認します。
    • ソース コンピューターと影響を受けるコンピューターの間にあるすべてのファイアウォール (影響を受けるコンピューター上の Windows ファイアウォールを含む) の構成を調べて、ファイアウォールによって RDP ポートがブロックされているかどうかを確認します。