PSRemotingの有効化:ローカルおよびリモート技術

Windowsでは、PSRemotingはデフォルトで有効になっている場合もありますが、常に有効になっているわけではありません。PSRemotingが有効かどうかをテストしたり、WindowsでPSRemotingを有効にする必要がある場合は、このチュートリアルをご覧ください。

このチュートリアルでは、Windowsを実行しているローカルおよびリモートコンピュータでPSRemotingを有効にするさまざまな方法を説明します。

さあ、始めましょう!

PSRemotingの有効化には多くの作業が必要です。

PowerShell Remotingについて初めて学ぶ場合、有効化は単一のコマンドだけで行われると思うかもしれません。おそらく、Enable-PSRemotingのPowerShellコマンドレットに関する参照を見たことがあり、それを実行するとどこかにビットが切り替わると思っているかもしれません。しかし、それは間違いです。

PSRemotingの有効化には、背後で多くのタスクが実行される必要があります。PowerShell Remotingは他のシステムに依存して正常に実行されるため、いくつかの依存関係があります。

たとえば、Windowsでは、パラメータを指定せずにEnable-PSRemotingコマンドレットを実行すると、次のすべてのタスクが実行されます:

  1. WinRMサービスが開始され、自動起動に設定されます。
  2. デフォルトのWinRMポート5985でのHTTPトラフィック用のリスナーが作成されます。
  3. WS-Managementのファイアウォール例外が有効になります。
  4. PowerShellセッション構成がWS-Managementに登録されます。
  5. PowerShellセッション構成が有効になります。
  6. PowerShellリモートセッションを設定してリモートアクセスを許可します。
  7. すべての変更を適用するためにWinRMサーバーを再起動します。

手動でこれをすべて行う必要がなくて良かったですね。なぜEnable-PSRemotingコマンドレットですべてができると言及するのですか?なぜなら、何かがうまくいかない場合に、何が起こったかをトラブルシューティングする必要があるからです。

WindowsのデフォルトのPSRemoting設定

PSRemotingはWindowsで生まれたものなので、デフォルトでは有効になっていますが、普遍的に有効ではなく、またすべてのWindows OSバージョンで有効ではありません。

すべてのWindowsクライアントオペレーティングシステムでは、PSRemotingは常に無効になっています。

Windows Serverでは、PSRemotingは時々有効になっていますが、Windowsが実行されているネットワークプロファイルによって異なります。Windows OSのPSRemotingが有効かどうかを確認するのに役立つ便利な表が以下にあります。

Operating System Network Profile PSRemoting
Windows Server 2008 R2 Domain/Private Disabled
Windows Server 2008 R2 Public Disabled
Windows Server 2012 & Newer Domain/Private Enabled
Windows Server 2012 & Newer Public Enabled within the same subnet

一方、Linuxは簡単です。PSRemotingは存在しません!さらに、デフォルトではPowerShellすらインストールされていません。LinuxでPSRemotingを実行するには、設定する必要があります。

話はここまでです、実際にPSRemotingの使用方法を見ていきましょう!

前提条件

このセクションの例に従って進める場合は、以下のものを準備してください:

  • A Windows Server 2008 R2 or later machine
  • A local or Active Directory domain user in the local administrators group

ローカルでPSRemotingを有効にする

PSRemotingを有効にする最も簡単な方法の1つは、組み込みのEnable-PSRemotingコマンドを使用することです。このコマンドは、多くの異なるサービスを構成してPowerShell Remotingをサポートするためのショートカットです。

Enable-PSRemotingコマンドレットの使用方法

このコマンドをパラメータなしで実行すると、実行しているOSに応じて異なるアクションが実行されます。現在のWindows OSでは、同じ基本的な手順が実行されます。PSRemotingが有効になり、WinRM HTTPリスナーが作成され、ファイアウォールのルールが有効になります。重要な違いは、Publicネットワークの扱い方です。

Windows Server 2019などのサーバーOSでは、Publicネットワークのファイアウォールルールにより、同じネットワーク上の他のデバイスからのリモート接続が許可されます。Windows 10などのクライアントOSでは、パブリックネットワークであるというエラーメッセージが表示されます。

Windowsがどのネットワークプロファイルで実行されているかわからない場合は、次のコマンドを実行します:

Get-NetConnectionProfile

信頼できるネットワーク上でのみPSRemotingを使用してください。なぜなら、それはリモート接続を待ち受けるために実質的にウェブサーバーを実行しているからです。

Get-NetConnectionProfile

プライベートまたはドメイン以外のネットワークプロファイルでPSRemotingを実行しても問題がない場合は、SkipNetworkProfileCheckパラメータを使用してネットワークプロファイルのチェックをスキップすることができます。このパラメータを使用すると、Windowsファイアウォール上でWinRMポートが開かれます。

Enable-PSRemoting -SkipNetworkProfileCheck

SkipNetworkProfileCheckパラメータを使用すると、現在のネットワークプロファイルでのPowerShellリモーティングに対してWindowsファイアウォールが開かれますが、同じサブネット上のマシンからのリモート接続のみが許可されます。

Enable-PSRemotingと一緒に使用できる2つのパラメータは、-Force-Confirmです。 -Forceを使用すると、Enable-PSRemotingコマンドを実行する際に通常表示されるすべてのプロンプトをスキップすることができます。同じ結果を得るために-Confirm:$falseを使用することもできます。

winrm quickconfigコマンドの使用

winrm quickconfigコマンドは、Enable-PSRemotingコマンドレットが作成される前に一般的なPSRemotingの設定方法でしたが、それでも使用されています。単にwinrm quickconfigを実行すると、WinRMサービスが有効になり、HTTPリスナーが作成され、ファイアウォールルールが有効になります。これらはすべて、Enable-PSRemotingで実行されるものですが、これによってマシンがリモートPowerShellセッションを処理できるようには設定されません。

winrmコマンドの便利な点は、HTTPSリスナーの設定です。手動で行うこともできますが、適切な証明書を持っている場合、winrm quickconfig -transport:httpsを実行するだけで、HTTPSリスナーとHTTPSファイアウォールルールが設定されます。

リモートでPSRemotingを有効にする

これまで、ローカルコンピュータでコマンドを実行することでPSRemotingを有効にできることを学びました。これは鶏と卵のような状況になります。PSRemotingを使用してリモートコンピュータでコマンドを実行するには、どのようにリモートでコマンドを実行しますか?まだ PSRemotingがない状態で

3つの方法があります。PSexecユーティリティ、WMI、およびグループポリシー

Psexecを使用する

PSExecは、PSRemotingのようにリモートコマンドを実行する便利なユーティリティです。ただし、PSexecは異なる通信方法を使用しているため、それを利用することができます!

PSexecを使用すると、次のコマンドを使用してローカルコンピュータからServerBサーバーに接続し、PowerShellプロセスを開始し、Enable-PSRemotingコマンドを-Forceスイッチと共に実行します。

.\psexec.exe \ServerB -h -s powershell.exe Enable-PSRemoting -Force

このオプションは、リモートシステムでPSRemotingを有効にする必要がある一時的なインスタンスに適していますが、多くのシステムでPSRemotingを有効にする場合には適しておらず、psexecをダウンロードする必要があります。

WMIを使用する

PSexecが機能しない場合があります。多くのセキュリティソフトウェアはpsexecをブロックしますが、心配する必要はありません。WMIも使用できます!

PowerShellとInvoke-CimMethodコマンドレットを使用します。 Invoke-CimMethodコマンドレットを使用すると、PowerShellはDCOMを介してリモートコンピュータに接続し、メソッドを呼び出すことができます。

幸運なことに、WMIにはプロセスを呼び出すことができるWin32_Processクラスがあります。CreateメソッドをWin32_Processに対して呼び出すことにより、Invoke-CimMethodはリモートコンピュータに接続し、以下に示すようにPowerShellを呼び出してEnable-PSRemotingを実行します。

以下の例では、セッション接続用のハッシュテーブルが作成されています。このハッシュテーブルでは、サーバー名、資格情報、およびプロトコルが指定されています。次のハッシュテーブルでは、Invoke-CimMethodのパラメータが設定されています。これらが実行されると、DCOMプロトコルを介してCIMセッションが作成され、それによってPowerShellプロセスが開始され、Enable-PSRemotingコマンドが実行されます。

$SessionArgs = @{
     ComputerName  = 'ServerB'
     Credential    = Get-Credential
     SessionOption = New-CimSessionOption -Protocol Dcom
 }
 $MethodArgs = @{
     ClassName     = 'Win32_Process'
     MethodName    = 'Create'
     CimSession    = New-CimSession @SessionArgs
     Arguments     = @{
         CommandLine = "powershell Start-Process powershell -ArgumentList 'Enable-PSRemoting -Force'"
     }
 }
 Invoke-CimMethod @MethodArgs

これをドメイン環境で使用する場合、コマンドを実行しているユーザーが宛先サーバーに管理者権限を持っている場合、Credential = Get-Credentialの行は除外できます。

グループポリシーの使用

WinRMを一斉に有効にするための最後であり、おそらく最良のオプションは、グループポリシーを使用することです。グループポリシーを使用すると、単一のグループポリシーオブジェクトを作成し、一度に数千台のコンピューターにそのポリシーを適用することができます。

すべてのコンピューターは、グループポリシーを使用するためにアクティブディレクトリドメインに所属している必要があります。

一度に多くのコンピューターでWinRMを有効にするために、次の3つの異なる設定項目を設定する必要があります:

  1. WinRMサービスを有効にする。
  2. WinRM用のWindowsファイアウォールポートを開く。
  3. WinRMリスナーを作成し、それに接続を許可する。

最初に、ドメインコントローラーにRDPします。または、ドメインに参加しているワークステーションにリモートサーバー管理ツール(RSAT)パッケージをインストールします。これにより、グループポリシー管理コンソール(GPMC)が利用できるようになります。

WinRMサービスの有効化

すべての対象コンピューターでWinRMサービスを有効にするには:

  1. GPMCを開き、GPOを作成します。新しいGPO内で、コンピューターの構成 —> Windowsの設定 —> セキュリティ設定 —> システムサービス
  2. Windows Remote Management(WS-Management)を選択します。
  3. 構成パネルで、このポリシー設定を定義するのチェックボックスを選択します。
  4. 自動のラジオボタンを選択して、WinRMサービスを起動時に自動的に開始するように設定します。
  5. 設定を確認するためにOKをクリックします。

Windowsファイアウォールポートの開放

次に、対象のすべてのコンピューターでWinRMポートを開放する必要があります。前述のGPOを編集しているときに:

  1. コンピューターの構成 —> Windowsの設定 —> セキュリティ設定 —> Windows Defenderファイアウォール(詳細設定)に移動します。

2. 新しいインバウンドルールを作成するために、新しいインバウンドルールをクリックします。

3. 最初のページで、事前定義を選択し、以下のようにWindows Remote Managementを選択します。

Windows Remote Management

4. 次のページで、ドメイン/プライベートネットワークルールのチェックボックスをオンにします。環境でパブリックネットワークが使用されており、それらからのリモート接続を許可する必要がある場合を除き、デフォルトのままにします。

Domain/Private network rule

5. 次のページでは、デフォルトのままに接続を許可にして、ルールを作成するために「完了」をクリックします。

WinRMリスナーとフィルタリストの作成

GPOに追加する最後の設定項目は、WinRMリスナーの作成とそのWinRMリスナーへの接続を許可することです。この設定は、HTTP用のWinRMリスナーを作成し、指定されたIPまたはIP範囲からの接続を許可します。

WinRM GPOを編集している場合:

  1. コンピューターの構成 —> 管理用テンプレート —> Windowsコンポーネント —> Windows Remote Management (WinRM) —> WinRMサービスに移動します。

2. 設定WinRMを介したリモートサービス管理を許可する有効を選択します。

3. WinRMを介したリモートサーバー管理を許可するの設定で、IPv4フィルタIPv6フィルタの両方にアスタリスク(*)を入力します。以下のように表示されます。

各フィルタリストで複数のホストをカンマで区切って指定することができます。これにより、事前にどのホストがすべてのターゲットコンピュータに接続するかを知ることができます。

Allow remote server management through WinRM

4. OK をクリックして、最新のGPO設定を確認します。

GPOの適用

この時点で、GPOは作成されて準備が整っているはずです。今やるべき最後のタスクは、このGPOをWinRMを有効にしたいすべてのターゲットコンピュータに適用することです。このチュートリアルでは、ターゲットコンピュータにGPOを割り当てる方法については学びません。

Active DirectoryでコンピュータにGPOを割り当てる方法がわからない場合は、この記事をチェックしてください。

次の手順

このチュートリアルでは、さまざまな方法でPSRemotingを有効にする方法を学びました。PSRemotingを有効にする方法は、環境によって大きく異なるため、ここであなたのシナリオをカバーできたことを願っています。

今学んだことを活用して、環境でPSRemotingを始めましょう!

Source:
https://adamtheautomator.com/enable-psremoting/