Windowsマシンをリモートからコマンドを使って操作したい場合、リモート操作に対応したコマンドを利用するというのが一般的ですが、現在のWindows 10や11、Windows Serverなら、リモート操作したいWindowsマシンにOpenSSHサーバー機能を追加することで、リモーマシンにSSH接続して、WindowsコマンドやPowerShellを使って操作することができます。
そこでここでは、Windows 10にOpenSSHサーバーを構築/設定して、リモートからコマンド操作する方法を解説します。
目次
OpenSSHサーバーのインストール
OpenSSHサーバーは、Windowsの機能を追加することでインストールでき、Windowsの設定からインストールする方法と、PowerShellコマンドレットを使ってインストールする方法があります。
Windowsの設定からインストール
Windowsの設定からインストールするときは、Windowsの「設定」から「アプリ」>「アプリと機能」を開き「オプション機能」をクリックします。
オプション機能画面が表示されるので「機能の追加」をクリックします。
機能の追加画面が表示されるので、一覧から「OpenSSHサーバー」にチェックを入れて「インストール」をクリックします。
OpenSSHサーバーがインストールされたら、スタートボタンを右クリックして、メニューから「コンピューターの管理」を選択します。
「コンピューターの管理」画面が開くので、画面左側のメニューから「サービスとアプリケーション」を展開して「サービス」を選択します。
画面中央にサービスの一覧が表示されるので 「OpenSSH SSH Server」をダブルクリックします。
サービスのプロパティ画面が表示されるので「開始」をクリックして、サービスの状態が「実行中」と表示されることを確認します。
Windows起動時に自動的にOpenSSHサーバーを開始させたいときは「スタートアップの種類」から「自動」を選択して「OK」をクリックします。
なお「Windows Defener ファイアウォール」を利用している場合は、自動的に受信許可設定が追加されるので、設定作業は不要ですが、ファイアウォール機能を搭載したサードパーティーのセキュリティ対策ソフト利用している場合は、セキュリティ対策ソフト側でTCP22番ポートでの受信接続を許可する必要があります。
以上で、OpenSSHサーバーのインストール完了です。
PowerShellコマンドレットでインストール
PowerShellコマンドレットでインストールするときは、管理者権限でPowerShellを起動して、まず以下のコマンドを実行して、追加する機能の名称を確認します。
PS> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
次に、以下のコマンドで機能名を指定してOpenSSHサーバーをインストールします。
PS> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
次に、以下のコマンドでOpenSSHサーバーのサービスの起動と自動起動設定を行います。
PS> Start-Service sshd
PS> Set-Service -Name sshd -StartupType 'Automatic'
「Windows Defener ファイアウォール」を利用している場合は、自動的に受信許可設定が追加されるので、設定作業は不要ですが、正しくファイアウォール設定が追加されているか確認したいときは、以下のコマンドを実行します。
PS> if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22} else {Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."}
コマンド実行後「Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists.」と表示されれば、正しく設定されています。
ファイアウォール機能を搭載したサードパーティーのセキュリティ対策ソフト利用している場合は、セキュリティ対策ソフト側でTCP22番ポートでの受信接続を許可する必要があります。
以上で、OpenSSHサーバーのインストール完了です。
OpenSSHサーバーの設定
OpenSSHサーバーは、デフォルト設定のままでも利用できますが、セキュリティを強化したいときなど、設定を変更したいときは「C:\ProgramData\ssh\sshd_config」ファイルを編集します。
なお、sshd_configファイルは、OpeSSHサーバーのサービスを初めて起動したときに自動生成されます。
sshd_configファイルを編集するときは、スタートメニューのプログラム一覧などで「メモ帳」を右クリックして「その他」>「管理者として実行」をクリックします。
メモ帳を管理者として実行したら「ファイル」メニューから「開く」を選択します。
「開く」画面が表示されるので、ファイルの場所に「C:\ProgramData\ssh」を指定し、ファイルの種類で「すべてのファイル」を指定します。
ファイルが一覧表示されるので「sshd_config」ファイルを選択して「開く」をクリックします。
設定ファイルには、たくさんの設定項目が記述されていますが、主だった設定項目は、次のとおりです。
- Port (XX):ssh接続に使いたいポート番号(1024 〜 65535)を指定できます。
- SyslogFacility (AUTH/LOCAL0):ログをイベントログに記録するかファイルに記録するかを指定できます。
- LogLevel (DEBUG/INFO/ERROR/CRITICAL):ログの詳細度を指定できます。
- PubkeyAuthentication (yes/no):公開鍵認証方式を有効化するかを指定できます。
- PasswordAuthentication (yes/no):パスワード認証を許可するかを指定できます。
- PermitEmptyPasswords (yes/no):空パスワードでのアクセスを許可するかを指定できます。
- AllowGroups、AllowUsers、DenyGroups、DenyUsers:ssh接続を許可(禁止)するユーザーやグループを指定できます。
それぞれの設定項目にどのような値を設定できるかは、以下の公式ページが参考になるでしょう。
Windows 用 OpenSSH サーバー構成 | Microsoft Learn
設定ファイルを編集した後は、設定を適用するためにサービス画面でOpenSSHサーバーのサービスを再起動します。
公開鍵認証の設定
OpenSSHサーバーをインターネットに公開するときなどは、セキュリティを強化するために公開鍵認証を使った接続がおすすめです。
公開鍵認証で接続するための設定は、次のとおりです。
まず、sshd_configファイルを開き、以下を設定します。
- StrictModes no:ファイル権限のチェックをオフにします。
- PubkeyAuthentication yes:公開鍵認証方式を有効化します。
- PasswordAuthentication no:パスワード認証を禁止します。
- #Match Group administrators
#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys:
Administratorsグループ所属のユーザーが、.sshフォルダー内のauthorized_keysファイルを読み込めるように、上の2行をコメントアウトします。
sshd_configファイルで「StrictModes no」を設定しない場合は、後述の手順で生成されるauthorized_keysファイルのアクセス許可設定で、SYSTEM/Administrators/自分自身以外のユーザーによる読み取り権限を削除しておく必要があります。
次に、SSHサーバー側で公開鍵認証を使って接続するユーザーでサインインし、コマンドプロンプトを起動して以下のコマンドを実行します。
C:\> ssh-keygen -t ed25519
コマンドを実行すると、キーファイルの保存場所やパスフレーズを設定するかを聞かれますが、ここではデフォルト設定のままエンターキーを押します。
C:\Users\<ユーザー名>\.sshに、秘密鍵「id_ed25519」と公開鍵「id_ed25519.pub」が生成されるので、生成された2つのファイルを別の場所にバックアップしてから、秘密鍵は削除し、公開鍵の名前は「authorized_keys」に変更します。
最後に、設定を適用するためにサービス画面でOpenSSHサーバーサービスを再起動します。
OpenSSHサーバーに接続
構築したSSHサーバーにリモートからSSH接続する場合、Windows 10や11から接続するなら標準搭載のOpenSSHクライアントが利用でき、コマンドプロンプトなどで以下のようにコマンドを実行して接続できます。
C:\> ssh <ユーザー名>@<接続先ホスト名/IPアドレス>
以下の画面では、接続先「192.168.10.225」にユーザー「admin」で接続しています。
正常に接続できれば、以下のようにプロンプトの左側に、接続ユーザー名や接続先のホスト名が表示され、ルートディレクトリは接続したユーザーのユーザーフォルダーとなっています。
鍵認証で接続するときは、事前にSSHサーバー上で作成した秘密鍵ファイルを、ローカルマシンの「C:¥Users\<ユーザー名>\.ssh」フォルダーに配置してから、以下のようにコマンドを実行して接続します。
C:\> ssh <ユーザー名>@<接続先ホスト名/IPアドレス> -i <秘密鍵のパス>
なお、Windowsの機能から構築したOpenSSHサーバーでは、SSH接続時の既定のシェルはWindowsコマンドに設定されているため、コマンドプロンプトと同じ操作でOpenSSHサーバーを操作できます。
また、PowerShellコマンドレットを利用したいときは、プロンプトで「powershell」と入力して実行すれば、PowerShellが起動しPowerShellコマンドレットを使ってOpenSSHサーバーを操作できます。
OpenSSHサーバーのアンインストール
Windowsの設定からOpenSSHサーバーをアンインストールするときは、インストール時と同じオプション機能画面でアンインストールできます。
PowerShellコマンドレットでOpenSSHサーバーをアンインストールするときは、管理者権限でPowerShellを起動して、以下のコマンドを実行します。
PS> Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
あとがき
Windowsマシンをリモートから管理する場合、リモートデスクトップなどのGUI環境で接続して管理するのが一般的ですが、コマンド操作で管理したい場合は、ここで紹介したSSH接続して管理する方法も検討の余地は十分にあるでしょう。