リモート デスクトップを介して Azure VM に接続しようとするときに、内部エラーが発生する
適用対象: ✔️ Windows VM
この記事では、Microsoft Azure で仮想マシン (VM) を接続しようとしたときに発生する可能性があるエラーについて説明します。
Note
この記事は役に立ちましたか? あなたの入力は私たちにとって重要です。 このページの Feedback ボタンを使用して、この記事がどれだけうまく機能したか、または改善方法をお知らせください。
現象
リモート デスクトップ プロトコル (RDP) を使用して Azure VM に接続できません。 リモートの構成セクションで接続がスタックするか、次のエラー メッセージが表示されます。
- RDP の内部エラー
- 内部エラーが発生しました
- このコンピューターはリモート コンピューターに接続できません。 接続を再試行してください。 問題が解決しない場合は、リモート コンピューターの所有者またはネットワーク管理者に問い合わせてください
原因
この問題は、次の理由で発生する可能性があります。
- 仮想マシンが攻撃を受けている可能性がある。
- ローカルの RSA 暗号化キーにアクセスできない。
- TLS プロトコルが無効になっている。
- 証明書が破損しているか、有効期限が切れている。
解決策
この問題をトラブルシューティングするには、以下のセクションの手順を実行します。 始める前に、バックアップとして、影響を受ける VM の OS ディスクのスナップショットを取得します。 詳細については、ディスクのスナップショットに関する記事を参照してください。
RDP セキュリティを確認する
まず、RDP ポート 3389 のネットワーク セキュリティ グループがセキュリティで保護されていない (開いている) かどうかを確認します。 セキュリティで保護されておらず、受信の送信元 IP アドレスとして * と表示される場合は、RDP ポートを特定のユーザーの IP アドレスに制限してから、RDP アクセスをテストします。 これが失敗した場合、次のセクションの手順を実行します。
シリアル コントロールを使用する
シリアル コンソールを使用するか、VM の OS ディスクを復旧 VM にアタッチして VM をオフライン修復します。
まず、シリアル コンソールに接続し、PowerShell インスタンスを開きます。 VM でシリアル コンソールが有効になっていない場合は、「VM をオフライン修復する」セクションに移動します。
手順 1: RDP ポートを確認する
PowerShell インスタンスで、NETSTAT を使用してポート 3389 が他のアプリケーションによって使用されているかどうかを確認します。
Netstat -anob |more
Termservice.exe がポート 3389 を使用している場合は、手順 2 に進みます。 別のサービスまたは Termservice.exe 以外のアプリケーションがポート 3389 を使用している場合は、次の手順に従います。
3389 サービスを使用しているアプリケーションのサービスを停止します。
Stop-Service -Name <ServiceName> -Force
ターミナル サービスを開始します。
Start-Service -Name Termservice
アプリケーションを停止できない場合、またはこの手法が適用できない場合は、RDP のポートを変更します。
次のようにポートを変更します。
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -name PortNumber -value <Hexportnumber> Stop-Service -Name Termservice -Force Start-Service -Name Termservice
新しいポートのファイアウォールを次のように設定します。
Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
Azure portal の RDP ポートで、新しいポートのネットワーク セキュリティ グループを更新します。
手順 2: RDP の自己署名証明書に適切なアクセス許可を設定する
PowerShell インスタンスで、次のコマンドを 1 つずつ実行して、RDP の自己署名証明書を更新します。
Import-Module PKI Set-Location Cert:\LocalMachine $RdpCertThumbprint = 'Cert:\LocalMachine\Remote Desktop\'+((Get-ChildItem -Path 'Cert:\LocalMachine\Remote Desktop\').thumbprint) Remove-Item -Path $RdpCertThumbprint Stop-Service -Name "SessionEnv" Start-Service -Name "SessionEnv"
この手法を使用して証明書を更新できない場合は、リモートで RDP の自己署名証明書の更新を試してください。
問題が発生している VM に接続している作業用 VM から、[実行] ボックスに「mmc」を入力して、Microsoft 管理コンソールを開きます。
[ファイル] メニューで [スナップインの追加と削除] を選択し、[証明書]、[追加] の順に選択します。
[コンピューター アカウント]、[別のコンピューター] の順に選択してから、問題の VM の IP アドレスを追加します。
Remote Desktop\Certificates フォルダーに移動し、証明書を右クリックして [削除] を選択します。
シリアル コンソールから PowerShell インスタンスで、リモート デスクトップ構成サービスを再開します。
Stop-Service -Name "SessionEnv" Start-Service -Name "SessionEnv"
MachineKeys フォルダーに対するアクセス許可をリセットします。
remove-module psreadline md c:\temp icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt takeown /f "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt Restart-Service TermService -Force
VM を再起動し、VM へのリモート デスクトップ接続の開始を試行します。 エラーが引き続き発生する場合は、次の手順に移動します。
手順 3: サポートされているすべての TLS バージョンを有効にする
RDP クライアントでは、既定のプロトコルとして TLS 1.0 が使用されます。 ただし、これは新しい標準となっている TLS 1.1 に変更できます。 VM で TLS 1.1 が無効になっている場合、接続は失敗します。
CMD インスタンスで、TLS プロトコルを有効にします。
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
AD ポリシーが変更を上書きすることを防ぐため、グループ ポリシーの更新を一時的に停止します。
REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
変更が反映されるように、VM を再起動します。 問題が解決された場合は、次のコマンドを実行してグループ ポリシーを再度有効にします。
sc config gpsvc start= auto sc start gpsvc gpupdate /force
変更が元に戻された場合、それは会社のドメイン内に Active Directory ポリシーが存在していることを意味します。 この問題の発生を回避するには、そのポリシーを変更する必要があります。
VM をオフライン修復する
復旧 VM に OS ディスクを接続する
- 復旧 VM に OS ディスクを接続します。
- OS ディスクを復旧 VM に接続したら、[ディスクの管理] コンソールでそのディスクが [オンライン] になっていることを確認します。 接続された OS ディスクに割り当てられたドライブ文字をメモします。
- 復旧 VM へのリモート デスクトップ接続を開始します。
ダンプ ログとシリアル コンソールを有効にする
ダンプ ログとシリアル コンソールを有効にするには、次のスクリプトを実行します。
管理者特権のコマンド プロンプト セッション ([管理者として実行]) を開きます。
次のスクリプトを実行します。
このスクリプトでは、接続されている OS ディスクに割り当てられているドライブ文字が F であると想定しています。このドライブ文字を実際の VM の適切な値に置き換えてください。
reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM REM Enable Serial Console bcdedit /store F:\boot\bcd /set {bootmgr} displaybootmenu yes bcdedit /store F:\boot\bcd /set {bootmgr} timeout 5 bcdedit /store F:\boot\bcd /set {bootmgr} bootems yes bcdedit /store F:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON bcdedit /store F:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200 REM Suggested configuration to enable OS Dump REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f reg unload HKLM\BROKENSYSTEM
MachineKeys フォルダーに対するアクセス許可をリセットする
管理者特権のコマンド プロンプト セッション ([管理者として実行]) を開きます。
次のスクリプトを実行します。 このスクリプトでは、接続されている OS ディスクに割り当てられているドライブ文字が F であると想定しています。このドライブ文字を実際の VM の適切な値に置き換えてください。
Md F:\temp icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt takeown /f "F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)" icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)" icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)" icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt
サポートされているすべての TLS バージョンを有効にする
管理者特権のコマンド プロンプト セッション ([管理者として実行]) を開き、次のコマンドを使用します。 次のスクリプトでは、接続されている OS ディスクに割り当てられているドライブ文字が F であると想定しています。このドライブ文字を実際の VM の適切な値に置き換えてください。
どの TLS が有効になっているかを確認します。
reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
キーが存在しないか、その値が 0 の場合、次のスクリプトを実行して、プロトコルを有効にします。
REM Enable TLS 1.0, TLS 1.1 and TLS 1.2 REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
NLA を有効にします。
REM Enable NLA REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f reg unload HKLM\BROKENSYSTEM
OS ディスクをデタッチして、VM を再作成してから、問題が解決されたかどうかを確認します。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。