SSHとは?
Secure Shellの略称でリモート通信するためのプロトコルです。
ネットワーク上の通信が暗号化されるため安全な通信が可能となります。
動作環境
クライアント
エディション | Windows 11 Home |
バージョン | 21H2 |
サーバー
VMware | Windows Server2019 |
前提条件
SSH接続するためにクライアントと接続先のサーバーを用意します。
サーバーはVMwareにて仮想マシンを作成、OSはWindows Server2019を使用します。
OpenSSHをインストール
PowerShellでクライアントとサーバーにOpenSSHをインストールしていきます。

クライアントにインストール
OpenSSH.Clientのインストールの確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

OpenSSH.ClientのStateがInstalledになっていたらクライアントにOpenSSHがインストールされているため問題ないです。最近のWindowsはデフォルトインストールとなっているようです。
インストールされていない場合はPowerShellで以下のコマンドを実行
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
サーバーにインストール
OpenSSH.Serverのインストール確認後にインストールされていなければ以下のコマンドを入力
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

以下の内容表示が出ていればインストール完了しています。
Path :
Online : True
RestartNeeded : False
SSHサーバーを起動する
SSHサーバーを起動
Start-Service sshd
スタートアップの種類が手動の場合、サーバーを再起動したときにServiceが立ち上がらないので自動起動に変更しておく
自動起動に変更
Set-Service -Name sshd -StartupType 'Automatic'

OpenSSHの起動とスタートアップの種類が自動起動に変更されているかの確認


クライアントとサーバーの疎通確認
pingが通るように設定を変更する
セキュリティが強化された Windows Defender ファイアーウォール

ファイルとプリンターの共有(エコー要求 – ICMPv4受信)

有効にチェックを入れてOK

サーバーのipアドレスを調べる
ipconfig/all

クライアントとサーバーの疎通確認
ping 192.168.19.131

クライアントで公開鍵と秘密鍵を作成する
公開鍵と秘密鍵を作成する
現在ログインしているユーザーで.sshフォルダを作成する。
mkdir C:\Users\takus\.ssh

.sshフォルダ内に移動
mkdir C:\Users\takus\.ssh
.sshフォルダ内で公開鍵と秘密鍵を生成する
ssh-keygen
今回はオプション指定なしで生成します。 ※要件によって変更してください。
オプション指定なしだとrsaの3072bitで作成されます
以下の入力項目は全て「Enter」を押下する
鍵の保存先フォルダの設定 Enter file in which to save the key (C:\Users\takus/.ssh/id_rsa):
鍵に対してパスワードを設定する Enter passphrase (empty for no passphrase):
Enter same passphrase again:

公開鍵と秘密鍵が生成されているかの確認
id_rsa.pub:公開鍵
id_rsa:秘密鍵

暗号化方式について
Mody氏は最終的に、実装や互換性を重視する場合は公開鍵の鍵長が2048bitもしくは4096bitのRSAを、パフォーマンスやセキュリティを重視する場合はEdDSAを推奨。DSAやECDSAは使わないように呼びかけています。
https://gigazine.net/news/20200828-ssh-encryption-algorithm/

サーバーにSSHの鍵を送信する
サーバーで.sshフォルダを作成した後に移動
mkdir .ssh
cd .ssh

クライアントで作成した公開鍵をサーバーに送信する
scp id_rsa.pub Administrator@192.168.19.131:C:\Users\Administrator\.ssh
初回の送信時はフィンガープリントの生成要否を聞かれます。これは「yes」にしましょう。
なりすまし攻撃の対策です。フィンガープリントを生成すると2回目以降の接続時に公開鍵が初回と異なる場合にエラーメッセージが表示され、接続できなくなります。
The authenticity of host ‘192.168.19.131 (192.168.19.131)’ can’t be established.
ECDSA key fingerprint is SHA256:3d4532Rm2qIvyOXKerAQMrtmXPlH22tDmWpjl5i+VPg.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
サーバーのパスワードを入力する
Administrator@192.168.19.131’s password:

サーバーに公開鍵が送信されているかの確認

サーバーにSSHの鍵を登録する
公開鍵の登録を行います。.sshフォルダを作成
cd C:\Users\Administrator\.ssh\
authorized_keysに公開鍵を登録する
type id_rsa.pub >> authorized_keys

サーバーにSSH接続をする
パスワード認証
パスワード認証でSSH接続をする
ssh Administrator@192.168.19.131

サーバーのパスワードを入力する
Administrator@192.168.19.131’s password:

SSH接続成功!
公開鍵認証
サーバーのC:\ProgramData\ssh\sshd_configを編集していきます。
①パスワード認証を禁止にするためコメントを外してnoに変更
Password Authentication no
②administrators_authorized_keysを読み込まないようにコメントアウト
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
sshd_configを変更した後はSSHサーバーを再起動する。
restart-service sshd

公開鍵認証方式でSSH接続
ssh Administrator@192.168.19.131

SSH接続成功!