PowerShellでリモートからコマンドを実行する
はじめに
みなさん,Linuxの管理時にSSHは使われますか?(使われますよね)
Windowsでも,リモートデスクトップではなく,PowerShellを使ってリモートからアクセスしたい!と思いませんか?(思いますよね)
ここでは,Windows 7以降を実行するWindows(Server・コンシューマどちらでも)に対して,リモートからPowerShellを用いてアクセスする方法を書きたいと思います.
WinRM (Windows Remote Management)を有効にする
接続先のホストで,一度だけ次のコマンドを実行して,WinRMを有効にします.
Enable-PSRemoting
この時,ネットワークの設定が「プライベート」でない場合,エラーが発生して停止してしまいますので,ネットワークの設定を変更するか,次のコマンドで強制的にWinRMを有効にします.
Enable-PSRemoting -SkipNetworkProfileCheck
同様に,接続元のホストでも先ほどのコマンドを実行してWinRMを有効にします.
なお,WinRMを有効にすることで,ファイアウォールの5985番ポートがオープンしますのでご注意ください.
TrustedHostsを設定する
WinRMでは,接続元のホストから見て,接続先のホストが「信頼できるホストである」ことが必要です.
Active Directory配下にどちらのホストも存在する場合は問題ないのですが,ワークグループ環境などでは,次のコマンドを用いて個別に接続先のホストを信頼してあげる必要があります.
接続元のホストから,次のコマンドを実行してください.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value (ホスト名 or IPアドレス or *)
実行すると次のようなメッセージが表示されますから,Yを入力して続行します.
WinRM セキュリティの構成。 このコマンドは WinRM クライアントの TrustedHosts の一覧を変更します。TrustedHosts の一覧内にあるコンピューターは認証されない可能性があります。クライアントはこれらのコンピューターに資格情報を送信する可能性があります。この一覧を変更します か? [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y
複数のホスト名やIPアドレスを設定する場合
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "host1, host2"
すべてのホストを信頼する場合
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*"
現在設定されているTrustedHostsを確認
Get-Item WSMan:\localhost\Client\TrustedHosts
設定されているTrustedHostsをすべて消去
Clear-Item WSMan:\localhost\Client\Trustedhosts
これで,接続前の準備は完了です(2回目以降は行う必要はありません)
セッションを開始する
次のコマンドにより,リモートマシンへの接続を開始します.
コマンド実行後にパスワードを入力するダイアログが開きます.
Enter-PSSession -ComputerName (ホスト名) -Credential (ユーザ名\ドメイン)
以降,ローカルマシンと同様にリモートコンピュータ上でPowerShellによる操作を行うことができます.
セッションを終了する
セッションを終了する場合は次のコマンドを実行します.
Exit-PSSession