treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(1/2)DOSコマンドでリモートログインしたい場合

コマンドプロンプトでリモートログインしたいことは結構多いのかなぁ、と思います。定期的に検索で訪問される方がいるように見受けられます。
どれを使おうかな、と思っても迷うだけでどれを使えばいいかいま一つはっきりしないことはありませんか?
今日は、概要編として、コマンドプロンプトでPCをリモート操作する場合の選択肢となる3つの機能のうちPSEXECとPowershellについて簡単に解説します。
コマンドラインでリモート操作をしたい、という要望をお持ちの方、基礎知識としてご覧ください。一部技術動向的な読み物になっています。

 

f:id:treedown:20160219115916p:plain

最初に

Windowsにおけるコマンドラインベースでリモートログインを実行したい場合に考えられるのは3つの選択肢があります。

  1. PSEXEC
  2. Powershell
  3. OpenSSH for Windows

どれを使うかは環境における条件と事前準備により異なります。リモート操作の場合操作対象となるリモートPCにどのような準備が必要になるか、という点において、一番の動機になり得ます。それぞれ解説します。

PSEXEC

操作対象のリモートPCに一番準備が必要ない接続方法がこのPSEXECです。なにせWindows標準のRPC経由でアクセスができれば利用可能、という点が手軽さ満点です。
必要なポートもTCP135、TCP445、TCP1025-65535(RPC動的ポート)と、なりますが、このTCP135はActive Directoryで利用するポートなので社内LANでは通常開放されていますし、TCP445はファイルサーバ接続において利用するポートなのでこれも社内LANでは通常開放されています。よほど厳格な制限をしていない限りTCP1025-65535の動的ポートも解放されていることは多いです。
つまり標準的に開放されているポート経由で、リモート操作対象のPCにはインストール不要なうえ、リモートPCを設定しなくてもリモート接続でCUIが利用できる、という点においてPSEXECは他者より優れているといえます。

コマンドプロンプトで利用できるコマンドで、コマンドプロンプト内で出力結果表示までが完結する機能だけ、となります。
よければこちらもどうぞ。

blog.treedown.net

Powershell

現状のスタンダードはこのPowershellです。Microsoftの力の入れ具合が他と違います。コマンドプロンプトのコマンドに加え、Powershellの命令も実行できますので、おそらくはこれからのWindowsにおけるCUI環境はこのPowershellが主役になってくると考えられます。(AzureでもOffice365でも管理業務ではPowershellで効率化できる、という点も追い風になっています。まあGUIが用意されていない機能を制御するためにPowershell以外にUIの選択肢がないという言い方もできますが)

Powershellを利用するためには事前準備が必要です。リモート操作対象のPCでPowershellを起動して以下のコマンドを実行しPowershellのリモート操作を有効化しておく必要があります。

まずは
----------------------------------------------
Set-ExecutionPolicy RemoteSigned
----------------------------------------------
ここでいくつかの対話型入力を要求されますので、「はい(Y)」を選択して設定を進めます。続いて、
----------------------------------------------
Enable-PSRemoting
----------------------------------------------
再度、いくつかの対話型入力を要求されますので、「はい(Y)」を選択して設定を進めます。続いて、
----------------------------------------------
Set-Item WSMan:\localhost\Client\TrustedHosts -Value %NETWORKADDRESS%
----------------------------------------------
「%NETWORKADDRESS%」の部分にはアクセス対象のネットワークアドレス(サブネット)を入力します。例えばご自身のサブネットが192.168.1.0/24であれば「192.168.*」と入力すればいいですし、172.16.1.0/24であれば「172.16.*」のように入力すればOKです。
入力例としてご自身のサブネットが192.168.1.0/24の場合のコマンドラインです。
----------------------------------------------
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.*
----------------------------------------------
ちなみに今の許可がどうなっているかは以下のコマンドで確認可能です。
----------------------------------------------
Get-Item WSMan:\localhost\Client\TrustedHosts
----------------------------------------------
アクセス許可後には、同一のサブネット内でPowershellのリモート接続が可能になります。実際に接続してみます。(※%COMPUTERNAME%欄はコンピュータ名かIPアドレスになります。)
----------------------------------------------
PS C:\WINDOWS\system32> Enter-PSSession %COMPUTERNAME%
[%COMPUTERNAME%]: PS C:\Users\Admin\Documents>
----------------------------------------------
注意点としては、powershellを実行するユーザのID&パスワードをもってPSSessionが開始する点です。パススルー認証のようなものです。もし現在のログインユーザがリモート側のユーザとして登録されていないのであれば、手元のDOS窓
「runas /user:%USERNAME% powershell」として、別ユーザでPowershellを起動して「Enter-PSSession %COMPUTERNAME%」を実行すると接続できます。

ただこれだけですとローカルサブネット内(同一セグメント内)でしかPowershellのリモート接続は有効になっていません。
もし、他のサブネットからリモートアクセスしたい場合にはファイアウォールの設定を追加(確認)しておきます。
設定対象は「Windows リモート管理 (HTTP 受信)」です。このスコープを変更します。
図:ファイアウォール設定画面

f:id:treedown:20160219115633p:plain
別のサブネットからのアクセスにはこの「リモートIPアドレス」欄(これらのIPアドレス指定)に「192.168.XXX.0/24」のようにアクセス元のサブネットをスコープに追加する必要があります。

事前準備はこれだけです。

続きは明日

長くなってしまいましたので、続きは明日にします。