第3章 OpenSSH サーバの環境構築(Windows)
Windows における OpenSSH サーバの導入
Windows 10(バージョン 1809 以降)、Windows 11、および Windows Server では、OS 標準のオプション機能として OpenSSH サーバが提供されています。
管理者権限で起動した PowerShell を開き、以下のコマンドを実行してインストール状況を確認し、インストールします。
# OpenSSH サーバの利用可能状態を確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
# OpenSSH サーバ機能のインストール
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
「RestartNeeded: False」と表示されれば、再起動なしで直ちに利用可能です。
サービスの起動とスタートアップ設定
インストール直後の SSH サーバサービス(sshd)は停止状態であり、スタートアップの種類も手動になっています。
サービスを自動起動に設定し、直ちに起動します。
# スタートアップの種類を自動に変更
Set-Service -Name sshd -StartupType 'Automatic'
# サービスを開始
Start-Service sshd
# 稼働状態の確認
Get-Service -Name sshd
Status が Running になっていれば正常に起動しています。
ファイアウォール受信規則の確認
OpenSSH サーバをインストールすると、通常は自動的に Windows Defender ファイアウォールに受信規則が追加されます。 以下のコマンドで規則が有効になっているか確認します。
Get-NetFirewallRule -Name *ssh* | Select-Object Name, DisplayName, Description, Enabled
もし規則が存在しない場合や無効になっている場合は、手動でポート 22 の受信を許可します。
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' `
-DisplayName 'OpenSSH SSH Server (sshd)' `
-Enabled True `
-Direction Inbound `
-Protocol TCP `
-Action Allow `
-LocalPort 22
設定ファイルの構成
Windows 版 OpenSSH サーバの設定ファイルは、以下のパスに格納されています。
C:\ProgramData\ssh\sshd_config
エクスプローラーでは C:\ProgramData は隠しフォルダとなっています。メモ帳などを管理者権限で開いて編集します。
notepad C:\ProgramData\ssh\sshd_config
Windows における公開鍵配置の重要な違い
Windows 版 OpenSSH で最もつまずきやすいのが、「ログインするユーザーの権限グループによって公開鍵の配置先が異なる」という点です。
1. 一般ユーザーの場合
Administrators グループに属さない一般ローカルユーザーは、Linux と同様にユーザープロファイル配下に公開鍵を配置します。
C:\Users\<ユーザー名>\.ssh\authorized_keys
2. 管理者ユーザー(Administrators グループ)の場合
対象ユーザーが Administrators グループに所属している場合、sshd_config の末尾にあるデフォルト設定によって、ユーザーフォルダ配下の authorized_keys は無視されます。
代わりに、以下のシステム共通ファイルに公開鍵を追記する必要があります。
C:\ProgramData\ssh\administrators_authorized_keys
sshd_config 内の該当定義は以下のようになっています。
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
▸ administrators_authorized_keys のアクセス権限設定
このファイルは、セキュリティ上、アクセス権(ACL)が厳格に保護されている必要があります。 他のユーザーからの読み取り権限が残っていると、安全のために認証が自動的に拒否されます。
公開鍵を配置した後、管理者 PowerShell で以下のコマンドを実行してアクセス権を正しく設定します。
# 権限の継承を無効化し、SYSTEM と Administrators のみにフルコントロールを付与
$path = "C:\ProgramData\ssh\administrators_authorized_keys"
icacls.exe $path /inheritance:r /grant "NT AUTHORITY\SYSTEM:(F)" "BUILTIN\Administrators:(F)"
デフォルト接続シェルの変更(PowerShell への設定)
SSH 接続直後のデフォルトシェルは通常コマンドプロンプト(cmd.exe)です。
これを PowerShell に変更したい場合は、以下のレジストリコマンドを実行します。
# デフォルトシェルを Windows PowerShell に設定
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" `
-PropertyType String -Force
# PowerShell 7 (pwsh) がインストールされている場合の指定例
# -Value "C:\Program Files\PowerShell\7\pwsh.exe"
設定変更後は、以下のコマンドで SSH サービスを再起動して反映させます。
Restart-Service sshd