2020年4月27日月曜日

【PowerShell】3行のコマンドでWindowsのリモートデスクトップ接続を有効にする方法!

近年はサーバ仮想化やクラウド化が進み、物理サーバよりも仮想サーバを構築することが多くなっている。特に仮想サーバの場合、物理的なモニター・キーボードがないことから、通常はWindowsのリモートデスクトップ接続を有効にして、リモートから操作することが通常であると思われる。

しかし、Windows Serverは、Windows Server 2019となってもデフォルトではリモートデスクトップ接続は有効になっておらず、手動で設定を変更する必要があり、非常にめんどくさい・・・。というわけで、PowerShellで実行する方法を確認してみた。

確認した結果、コマンドとしてはわずか3行となることがわかったが、長いコマンドとなるため手打ちは現実的ではない。リモートデスクトップ設定する前に実行する場合は、スクリプト化などしてファイルサーバ等に配置し、端末やサーバにスクリプトをコピー実行するという使い方が現実的だろう。

リモートデスクトップ接続を有効にする

結論から言うと、リモートデスクトップはレジストリを書き換えることで対処する。HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Serverに保存されている以下2つのキーを設定する。
キー デフォルト値 説明
fDenyTSConnections 1 「このコンピュータへのリモート接続を許可しない/許可しない」の設定。0で「許可する」、1で「許可しない」。
UserAuthentication 0 「ネットワークレベル認証でリモートデスクトップを実行しているコンピューターからのみ接続を許可する (推奨)」の設定。0で無効、1で有効。
Get-ItemPropertyコマンドレットで現在の設定値を確認することができる。
PS C:\> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name  "fDenyTSConnections"

fDenyTSConnections : 1
PSPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
                     erver
PSParentPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
PSChildName        : Terminal Server
PSDrive            : HKLM
PSProvider         : Microsoft.PowerShell.Core\Registry
PS C:\> Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication"

UserAuthentication : 0
PSPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
                     erver\WinStations\RDP-Tcp
PSParentPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal S
                     erver\WinStations
PSChildName        : RDP-Tcp
PSDrive            : HKLM
PSProvider         : Microsoft.PowerShell.Core\Registry
Set-ItemPropertyコマンドレットで設定を変更する。
PS C:\> Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name  "fDenyTSConnections" -Value "0"
PS C:\> Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1

上記コマンドを実行すると以下の通りリモートデスクトップの設定が変更される。

【変更前】

【変更後】

Windowsファイアウォールでリモートデスクトップの通信を許可する

GUIでリモートデスクトップ接続を許可する設定を実施した場合は、同時にWindowsファイアウォールの必要な通信規則を有効にしてくれるが、レジストリを直接書き換えた場合は設定されないため、手動でWindowsファイアウォールの通信規則の有効化が必要となる。

通信の規則自体はOSデフォルトで作成がされており、「RemoteDesktop~」から始まる以下3つの規則を有効化すればよい。
  • RemoteDesktop-UserMode-In-TCP
  • RemoteDesktop-UserMode-In-UDP
  • RemoteDesktop-Shadow-In-TCP
リモートデスクトップに関するファイアウォール規則を確認するコマンドは以下の通り。Windows Server 2019などでは「リモートデスクトップ (WebSocket)」と呼ばれる通信ルールが存在するが、有効にする必要はないため、表示から除外している。
PS C:\> Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | ft Name,DisplayName,Enabled -AutoSize

Name                          DisplayName                                        Enabled
----                          -----------                                        -------
RemoteDesktop-UserMode-In-TCP リモート デスクトップ - ユーザー モード (TCP 受信)    False
RemoteDesktop-UserMode-In-UDP リモート デスクトップ - ユーザー モード (UDP 受信)    False
RemoteDesktop-Shadow-In-TCP   リモート デスクトップ - シャドウ (TCP 受信)           False
上記規則をSet-NetFirewallRuleコマンドレットを使って有効化する。
PS C:\> Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | Set-NetFirewallRule -Enabled true
上記コマンドを実行後にGUIのファイアウォールの状態を確認すると、問題なくリモートデスクトップの受信の規則が有効化されていることが確認できる。


まとめ

まとめると、以下3つのコマンドをメモ帳に書いておいて、「Enable-RDP.ps1」などの名前でスクリプトとして保存し、ファイルを右クリック→「PowerShellで実行」を実施すれば、最速でリモートデスクトップの有効化が実施できる。
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name  "fDenyTSConnections" -Value "0"
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1
Get-NetFirewallRule | Where-Object { $_.Name -like "RemoteDesktop*" -and $_.Name -notlike "*ws*" } | Set-NetFirewallRule -Enabled true


0 件のコメント:

コメントを投稿

人気の投稿