Windows 11 で OpenSSH サーバーをインストールする

# 概要
Windows 11 での OpenSSH サーバーのインストール方法を紹介します。また、SSH 接続時のデフォルトシェルの変更方法も併せて紹介します。

# OpenSSH のインストール
下記に Windows での OpenSSH に関する情報が記載されています。

https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse

上記を参照し、ここでは Windows 11 のGUIを使ったインストール方法を確認します。

## OpenSSH サーバーのインストール

`設定` アプリから `システム` > `オプション機能` を開きます。`オプション機能を追加する` の `機能を表示` にて `OpenSSH サーバー` を選択します。

![オプション機能の追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/9f66418b-b4ee-f9d5-9d65-40bfb3ed06fc.png)

下の `次へ` を押し、次の画面でも `追加` を押すことでインストールされます。

## OpenSSH サーバーの起動

ファイル名を指定して実行 (`Windows` + `R`) から、`services.msc` を実行します。

![ファイル名を指定して実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/60649797-20ab-6ac4-39ec-3552c9e5c337.png)

サービスの一覧から `OpenSSH SSH Server` をダブルクリックします。

![サービス一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/9fbcbcb6-0b78-9695-a58c-e19303a08125.png)

プロパティで以下の通り設定し、`OK` を押します。
- `スタートアップの種類`: `自動`
- `サービスの状態`: `開始`

![プロパティ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/d69b25b6-c8b9-629c-fa6a-9a05a437757e.png)

これで OpenSSH サーバーのインストールおよび起動が完了し、クライアントから SSH 接続が可能になります。

ここで、SSH 接続した際に使用されるデフォルトシェルはコマンドプロンプトとなっていますが、PowerShell などに変更したい場合は以下の設定を行います。

# SSH 接続時のデフォルトシェルの変更
以下の記事の `Windows での OpenSSH 用の既定のシェルの構成` を参照します。

https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_server_configuration

OpenSSH のデフォルトシェルの変更は、管理者権限で PowerShell から設定します。デフォルトシェルを以下の2つに設定する場合についてそれぞれ説明します。

- Windows PowerShell
- PowerShell 7

## Windows PowerShell をデフォルトシェルに設定
Windows に標準でインストールされている Windows PowerShell をデフォルトシェルに指定する場合は以下のコマンドになります。

```powershell:PowerShell (管理者権限)
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
```

コマンド実行後、クライアントから SSH 接続して Windows PowerShell が起動すれば完了です。

## PowerShell 7 をデフォルトシェルに設定
Windows に標準でインストールされている Windows PowerShell に対して、ユーザーが任意にインストールする PowerShell もデフォルトシェルとして利用できます。Windows PowerShell と PowerShell の差異については以下の記事で解説されていますが、PowerShell の方が機能は充実しています。

https://ascii.jp/elem/000/004/189/4189570/

PowerShell のインストールはこちらの公式ドキュメントを参考に行います。

https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows

インストール方法は複数ありますが、ここでは SSH サーバーにインストールすることを考慮してサーバー向けとして提供される `MSIパッケージ` を利用することとします。

> MSI パッケージ - Windows Server とエンタープライズ展開シナリオに最適な選択肢

:::note
X86 や X64 の Windows の場合、winget でも同じMSIパッケージがインストールされるので、winget を用いた方法でインストールしても問題ありません。
:::

[MSI パッケージのインストール](https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4#installing-the-msi-package) に記載されているリンクからインストール用パッケージをダウンロードします。

![MSI パッケージのインストール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591150/07eaaf23-e67c-b6fa-6ec2-8d777fc49f47.png)

PowerShell は `C:\Program Files\PowerShell\7\pwsh.exe` にインストールされるので、SSHのデフォルトシェルの設定は以下のコマンドで行います。

```powershell:PowerShell (管理者権限)
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
```

コマンド実行後、クライアントから SSH 接続して PowerShell が起動すれば完了です。