Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第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