Windows ServerでSSHを有効化する

# 今回やりたいこと
* Windows ServerはデフォルトでSSHが有効化されていないため、有効化を実施
* 公開鍵認証を使用して、Windows ServerにSSHログインを実施

# 環境
* Windows Server 2022 Standard
* Oracle Cloud Infrastructure上でインスタンスを作成
　（Windowsの設定を実施するため、別クラウドでも問題なし）
* Windows Serverには以下の初期設定を実施済み：
    * 日本語設定
    * システムロケールを日本に変更
    * タイムゾーンをJSTに変更
    * ファイアウォールの無効化
    * IE セキュリティ強化の構成の無効化
    * UACの非通知化

# 手順
## OpenSSH Serverの実行
最初に「**Windowsの設定**」から「**アプリ**」を選択します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/10bfff2b-1626-425a-93bb-0b430a383816.png)

「**オプション機能**」を選択します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/ce125729-b742-4433-8f77-a44b91e29fb0.png)

インストールされている機能内に「**OpenSSH サーバー**」が含まれていることを確認します。
インストールされていない場合は、「**機能の追加**」からインストールを行う必要があります。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/ef9a88a5-4c03-4a55-971b-3304031d3100.png)

次に、デフォルトではOpenSSH サーバーは無効化されているため、起動を実施します。
スタートメニューから「**Windows 管理ツール**」を選択します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/90c14120-f277-41f7-b49a-3e8a0eff5b53.png)

「**コンピューターの管理**」を選択します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/d340c3b3-39d5-40e7-bbc4-faa6456df058.png)

「**サービスとアプリケーション**」→「**サービス**」をそれぞれドリルダウンし、
「**OpenSSH Server**」の「**プロパティ**」を選択します。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/596554c8-25c8-4517-824d-977451f0860c.png)

スタートアップの種類を「**自動**」に変更し、「**適用**」を選択します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/efb373af-2df9-473a-8884-7c3fc9d53fc1.png)

サービスの状態の「**開始**」を選択します。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/9f1dece8-28da-45fb-9512-c6b11a141417.png)

サービスの状態が「**実行中**」となり、「**OK**」を選択します。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/6ef05439-c659-4b86-86d8-b59cf61a457e.png)

OpenSSH SSH Serverの状態が「**実行中**」に変更されます。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/6d99937f-9d6e-45ef-9598-0ab1dc662bf2.png)

## 秘密鍵・公開鍵の生成
OpenSSH サーバーの起動後、公開鍵認証で使用する秘密鍵・公開鍵の生成を実施します。

以下コマンドで任意のユーザー（ここでは「opc」）配下に`.ssh`の隠しディレクトリを作成します。
※「opc」：OCIでインスタンスを作成する時の初期ユーザー。AWSの「ec2-user」に相当する。
```Powershell:PowerShell
New-Item -Path "C:\Users\opc\.ssh" -ItemType Directory -Force
```

```:実行結果の例
    ディレクトリ: C:\Users\opc


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2025/02/19     15:29                .ssh
```

以下コマンドで秘密鍵・公開鍵を生成します。
```Powershell:PowerShell
ssh-keygen -t rsa -b 2048 -f C:\Users\opc\.ssh\id_rsa
```

```:実行結果の例
Generating public/private rsa key pair.
# パスフレーズを空白にする場合はいずれも「Enter」のみを押下する
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\opc\.ssh\id_rsa
Your public key has been saved in C:\Users\opc\.ssh\id_rsa.pub
The key fingerprint is:
SHA256:QTi8nSm/Qss1qg4qklbtRFxTnWqB0EsKS99XPBY+4/Q opc@Windows
The key's randomart image is:
+---[RSA 2048]----+
|     oo.+.o.o    |
|   o  +B ..B     |
|  . = =++o==.    |
|   . =oo+=o +    |
|    o  oS  . E   |
|   . o. +        |
| .o oo + o       |
|+o . .= .        |
|=  .o. .         |
+----[SHA256]-----+
```

`.ssh`内に公開鍵（ここでは`id_rsa_pub`）が生成されるため内容をコピーします。
同じディレクトリに`authorized_keys`を新規作成、コピーした公開鍵の内容をペーストして保存します。
※`authorized_keys`：公開鍵を保存し、対応する秘密鍵でアクセスを認証するためのファイルです。

秘密鍵・公開鍵を生成後、TeratermでSSHログインができるか確認します。
ホスト名を「**localhost**」で「**OK**」を選択する。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/2e281d89-ba89-4ea1-b9d4-c70d725c1e1b.png)

以下の警告が出るので、「**続行**」を選択します。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/d3ccc883-3c65-4aaa-a15e-8169dff028e5.png)

ログイン画面が出るので、以下の項目を入力し、「**OK**」を選択します。
* ユーザ名
* パスフレーズ
* 秘密鍵のパス
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/169ef5a8-b2d0-4543-a033-a57e1f27e988.png)

SSHログインが成功した場合、以下の画面が表示される。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/3dbf0d27-4593-4543-ba39-a47192d5d283.png)

本手順は以上となります。
Windows Server で SSH を有効化することで、ポートフォワーディングで踏み台サーバとしても使用することができます。
また、SSH は セキュアなリモートアクセス を提供し、パスワードなしでログインできる 公開鍵認証 を使用することで、セキュリティを向上させることができます。
さらに、ファイアウォール越しに安全に接続できるため、リモート作業を効率的に行うことができ、サーバ管理者が物理的にサーバーにアクセスせずに操作を行うことが可能になります。
このように、SSH を有効にすることは、セキュリティの強化だけでなく、リモートアクセスの効率化にも大いに役立ちます。