Win ssh サーバ設定 @PowerShell

2024/03/28 00:09 OS別::Windowsその他::技術情報
Windows のバージョンごとに設定手順が変更されることがあるため、汎用的に利用できる PowerShell での設定方法を記載します。


確認環境

実際に動作を確認した環境は、以下の通りです。
Version 情報(23H2)
Version 情報(23H2)

ただし、想定する対象としては、Windows Server 2022, Windows Server 2019, Windows 11, Windows 10 (Microsoft 公式情報より)になります。

PowerShell 起動(管理者モード)

システムへの変更を行うため、管理者モードで PowerShell を起動します。

管理者モードで起動

Win キーを押し、そのまま power shell と入力します。

検索結果に Windows PowerShell が表示されたら、「管理者として実行する」を選択します。
PowerShell 起動
PowerShell 起動

このとき、ユーザアカウント制御が表示された場合は「はい」を押して続けます。

起動確認

タイトルバーに「管理者:Windows PowerShell」が表示された画面が起動することを確認します。
PowerShell 管理者モード
PowerShell 管理者モード

sshd インストール

対象バージョン名称確認

インストールする PowerShell のバージョン情報を表示します。
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
OpenSSH バージョン確認
OpenSSH バージョン確認

画像では見辛いですが、以下のように表示されることを確認します。
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed



PS C:\WINDOWS\system32>

インストール

次のコマンドを実行します。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
インストール画面
しばらく、CUI 上にインストール状況が表示されます。
OpenSSH インストール中
OpenSSH インストール中
インストール結果画面
続けて、OpenSSH がインストールされたことを確認します。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
OpenSSH インストール結果
OpenSSH インストール結果
画面上に、以下のように Online: True が表示されます。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0


Path          :
Online        : True
RestartNeeded : False



PS C:\WINDOWS\system32>

サーバ設定

サービス起動

sshd サービスを起動します。
PS C:\WINDOWS\system32> Start-Service sshd

サービス自動起動

sshd サービスを、自動起動するよう設定変更します。
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType 'Automatic'

余談(スタートアップの種類を変更)

ちなみに、以下のコマンドでサービスの停止やスタートアップの種類を変更できます。
サービス停止
PS C:\WINDOWS\system32> Stop-Service -Name sshd
※ sshd は、中断と再開をサポートしていないため、中断できないようです。
スタートアップの種類
「自動」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Automatic
「手動」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Manual
「無効」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Disabled

Firewall

必要に応じて、ファイアウォール設定を行います。
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    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."
}

鍵の生成

鍵を生成するには、以下のコマンドを実行します。
ssh-keygen -t ed25519
※ 記事の作成時点では、rsa より ed25519 が推奨されています。適切に指定してください。

実行例
PS C:\WINDOWS\system32> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\test/.ssh/id_ed25519):
Created directory 'C:\\Users\\test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\test/.ssh/id_ed25519
Your public key has been saved in C:\Users\test/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:vNdhiYXL3ci1SDWYKf+pv2SOLiXSdDBWWFCKsNJzlk0 test@Win100
The key's randomart image is:
+--[ED25519 256]--+
|      .   E*++o  |
|     . o =*o+. . |
|    . + =.+=o .  |
|     . = ..Bo* . |
|        So+.O.o. |
|        ..oo..o  |
|        ...o..o  |
|         .. .=   |
|           oo.+. |
+----[SHA256]-----+
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\


    ディレクトリ: C:\Users\test\.ssh


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024/03/27     23:29            399 id_ed25519
-a----        2024/03/27     23:29             95 id_ed25519.pub


PS C:\WINDOWS\system32>
公開鍵 id_ed25519.pub を、リモートアクセスしたい相手側サーバに適切に設定すると、鍵を利用した ssh 接続が可能になります。

公開鍵の格納先

Windows でも Linux でも、id_ed25519.pub の内容を、そのまま全部、1行で authorized_keys ファイルに記載してください。
公開鍵は「公開してしまう鍵」なので、ファイルを開いてコピペするなど、多少雑に扱っても問題ありません。
Windows ssh サーバ
sshd サービスが動いている Windows サーバの、ユーザプロファイル直下に .ssh フォルダを作成して配置します。

例として、test ユーザのユーザプロファイル情報を表示します。
PS C:\WINDOWS\system32> echo $env:USERPROFILE\.ssh\
C:\Users\test\.ssh\
PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\authorized_keys


    ディレクトリ: C:\Users\test\.ssh


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024/03/27     23:29             95 authorized_keys


PS C:\WINDOWS\system32>
Linux サーバ
ユーザのホームディレクトリ直下に .ssh ディレクトリを作成して配置します。
例として、test ユーザのホームディレクトリ情報を表示します。
$ test@rasp080:~/.ssh $ ls -ld ~/.ssh
drwx------ 2 test test 4096  3月 27 23:41 /home/test/.ssh
test@raspberry:~/.ssh $
test@raspberry:~/.ssh $ ls -l ~/.ssh/authorized_keys
-rw------- 1 test test 0  3月 27 23:41 /home/test/.ssh/authorized_keys
※ Linux サーバは、特に権限情報が重要視されます。 .ssh ディレクトリは 700 かつ authorized_keys は 600 にしてください。

適切に設定すると、以下のように ssh 接続可能です。
PowerShell 画面から Linux へ ssh 実行
PowerShell 画面から Linux へ ssh 実行

sshd アンインストール

インストールした sshd をアンインストールするには、次のコマンドで実行できます。
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

参考