PowerShell による Windows マシンリモート接続

2023/04/08に公開

はじめに

クライアントマシンの PowerShell から複数のリモートマシン(Windows)に接続して操作したい、という場面はシステム管理者ならまっ先に遭遇する要望かと思います。

でもこれ、組織の環境によってはなかなかうまくいかないんです。

書籍などでは、結構あっさりリモート接続している例が載っているんですけどね。現実は、それはそれは厳しいのです。

うまくいかない理由としては、あらゆることが考えられますが、ここではうまくいった一つの例として書き残しておきたいと思います。


リモートマシンの設定

  • リモートマシンのリモート管理を有効にする。
Enable-PSRemoting -Force
  • リモートマシンの WinRM ファイアウォールの例外を有効にする。
Set-NetFirewallRule -Name WINRM-HTTP-In-TCP-PUBLIC -RemoteAddress Any -Profile Public
  • リモートマシンのネットワークプロファイルをプライベートに変更する。
# まずはネットワーク接続のインデックス番号を取得して調べます。この例では「6」が該当します。
Get-NetConnectionProfile

Name                     : YOURE_COMPUTER
InterfaceAlias           : Wi-Fi
InterfaceIndex           : 6
NetworkCategory          : Public
DomainAuthenticationKind : None
IPv4Connectivity         : LocalNetwork
IPv6Connectivity         : NoTraffic
# 次に、先程のインデックス番号(上記例では 6 ですね)を使ってネットワークプロファイルをプライベートに変更
Set-NetConnectionProfile -InterfaceIndex <インデックス番号> -NetworkCategory Private
  • リモートマシンでローカルユーザーに管理権限を付与するため、LocalAccountTokenFilterPolicy を構成する。
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WinRM\Service" -Name "AllowAutoConfig" -Value 1 -PropertyType "DWord" -Force
  • リモートマシンのローカルユーザーを管理者グループに追加する。
Add-LocalGroupMember -Group "Administrators" -Member "ユーザー名"

クライアントマシンの設定

  • クライアントマシンでリモートマシンのIPアドレスまたはホスト名をTrustedHostsに追加する。
Set-Item wsman:\localhost\Client\TrustedHosts -Value "リモートマシンのIPアドレスまたはホスト名" -Force

# 複数のリモートマシンのIPアドレスまたはホスト名をTrustedHostsに追加する場合は以下のようにコンマで区切る
$CurrentValue = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
$NewValue = $CurrentValue + ",新しいリモートマシンのIPアドレスまたはホスト名"
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $NewValue -Force
  • クライアントマシンでリモートマシンへの接続を試みる。
# 接続するリモートマシンのユーザー名とパスワードが求められます。
$credential = Get-Credential

# これで接続されたら完了です。
Enter-PSSession -ComputerName "リモートマシンのIPアドレスまたはホスト名" -Credential $credential -Authentication Negotiate

おわりに

Windows を管理していく上で、PowerShell はとても有用です。今回はリモートマシンへの接続にのみ焦点を当てましたが、イベントログの参照など、Windows 管理者には必須スキルと言っても過言ではないのではないでしょうか。

しかもこの PowerShell、Linux でも動作します。最近の Kali Linux には最初から入っていますし、Ubuntu にインストールすることだって簡単です。試したことはありませんが、Mac にも iOS にもインストールすることができるようです。

興味のある方は色々試してみてください!

Discussion