この記事を作った動機
Linux 環境ばっかりで SSH を使っていて、今まで Windows 環境では SSH クライアントは使ったことがあっても、SSH サーバーは使ったことがないということがあり、慣れていないところがあったので記録をしたい。主に、How to Enable and Configure SSH Server on Windows with OpenSSH | Windows OS Hub参考にした。
設定としては、パスワード認証は許可せず、全て公開鍵認証をさせるようにしている。そのため、クライアントにて SSH 接続用の公開鍵を作成し、その公開鍵の部分を SSH サーバーとなる Windows 機にて設定する必要がある。基本的に設定は全体として管理者権限を付与して行っていることを前提とする。
手順
OpenSSH をインストールする
Releases · PowerShell/Win32-OpenSSHによりインストーラをダウンロードし、実行する。インストールされているときと、されていないときで、sshd(SSH サーバ) の設定ファイルが存在するかどうかが変わる。
- インストールされていないとき
ls C:\Programdata\ssh\sshd_config
# ls : パス 'C:\Programdata\ssh\sshd_config' が存在しないため検出できません。
# 発生場所 行:1 文字:1
# + ls C:\Programdata\ssh\sshd_config
# + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# + CategoryInfo : ObjectNotFound: (C:\Programdata\ssh\sshd_config:String) [Get-ChildItem], ItemNotFoundException
# + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
- インストールされているとき
ls C:\Programdata\ssh\sshd_config
#
# ディレクトリ: C:\Programdata\ssh
#
# Mode LastWriteTime Length Name
# ---- ------------- ------ ----
# -a---- 2025/10/22 19:12 2230 sshd_config
OpenSSH を設定する
エディタはなんでもいいが、とにかくC:\Programdata\ssh\sshd_configを開いて編集する。管理者権限が必要である。設定内容は各自調整が必要である。以下は簡易的にテスト用に用意した設定であり、適切ではないと思われる。
code C:\Programdata\ssh\sshd_config
# ルート(管理者権限を持ったアカウント)でログインさせない
PermitRootLogin no
# 公開鍵によるユーザ認証を許可する
PubkeyAuthentication yes
# パスワードによるユーザ認証は許可しない
PasswordAuthentication no
# OpenSSH(Win版) ダウンロード時にデフォルトで有効になっている設定である。
# 管理者アカウントをOpenSSHデフォルトの設定で管理する場合、クライアントの公開鍵のパスは以下のようになる
# __PROGRAMDATA__/ssh/administrators_authorized_keys
# C:\ProgramData\ssh\administrators_authorized_keys
# 管理者アカウントであってもユーザー配下のホームディレクトリに公開鍵の設定を配置したい場合、以下の記述を削除するとできる。できれば避けたほうがいいかもしれない。
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
OpenSSH のサービスを有効化する
Windows 版 Systemd のようなコマンドを操作する。管理者権限が必要である。
コマンドライン (PowerShell)
# 起動時に自動的に SSH サーバーが立ち上がるようにする
set-service sshd -StartupType Automatic
# 初回起動時
start-service sshd
# 設定を反映するために再起動する
restart-service sshd
# 起動している様子を確認する
get-service
# Status Name DisplayName
# ------ ---- -----------
# Running sshd OpenSSH SSH Server
# SSH サーバーをを停止する
stop-service sshd
GUI
サービスなどと検索して管理画面を開き、設定を行う。
ファイヤウォールを設定する
SSH 接続ができるようにファイヤウォールに穴をあける(ポート開放)の設定が必要である。この操作をする際は PC が接続されている LAN などが安全であることを確認する必要がある。例えば、グローバルネットワーク(インターネット)に直接如何なるファイヤウォールとかもなしにつながっている PC 等では、設定を突き詰める必要があり、攻撃対象となりやすくセキュリティーの観点から推奨できないように見受けられる。
OpenSSH をインストールした時点ですでに有効(疎通ができる状態)になっている場合もあるようである。
SSH の公開鍵を登録する
注意事項として、Windows で管理者アカウントに対しては SSH したい場合、ユーザアカウントのホームディレクトリ配下ではなく、専用の決められた場所に公開鍵を保存する必要がある。ここでいう公開鍵とは、**SSH 接続をするクライアント(接続元)**となる PC 上においてあらかじめ生成しておいた公開鍵と秘密鍵のペアのうちの、秘密鍵ではないほうのことである。
- ユーザ配下に配置される SSH サーバーの公開鍵設定の場所
# [UserName] は適宜置き換えること
C:\Users\[UserName]\.ssh\authorized_keys
- Administrators グループに属しているアカウントにおける SSH サーバーの公開鍵設定の場所
C:\ProgramData\ssh\administrators_authorized_keys
- 登録する公開鍵の例 (ファイル名に
.pubとついているもの) 以下のような内容を登録する。間違っていると認証が通らない。以下は例示として一部を改変したものである。
# "..." の部分は省略を意味する
ssh-ed25519 AAA...PLdz [ユーザ名]@[ホスト名]
SSH 接続を行う
前提条件
- 管理者アカウントに SSH でログインしようとしている
- SSH クライアント(接続元) と SSH サーバー(接続先) 同一の LAN など、同じネットワークに属していること
- SSH のクライアントとサーバーとなる PC 間において、Ping などの疎通確認ができていること
- SSH 接続するユーザ名を test とする
接続の様子
- SSH サーバーとなる Win 機において、IP アドレスを確認
ipconfig
# Windows IP 構成
#
# イーサネット アダプター イーサネット:
#
# 接続固有の DNS サフィックス . . . . .: example.com
# リンクローカル IPv6 アドレス. . . . .:
# IPv4 アドレス . . . . . . . . . . . .: 192.168.1.35
# サブネット マスク . . . . . . . . . .: 255.255.255.0
# デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
- アカウント名を確認
whoami
[PCのホスト名]\test
- SSH クライアントとなる PC からアクセスを試みる
ssh test@192.168.1.35
Microsoft Windows [Version 10.0.26200.9457]
(c) Microsoft Corporation. All rghts reserved.
test@[PCのホスト名] C:\Users\test>exit
Connection to 133.54.220.136 closed.
おまけ(躓いたこと)
Ping が通らない
Windows 機に対して Ping をすることで疎通確認したいとき、以下の項目を許可するだけでは Ping が通らないことがあることが分かった。ファイヤウォール設定の開き方はファイヤウォールを設定するを参照すること。
SSH 接続できない
今回の場合は、管理者権限を持つアカウントの場合authorized_keysの配置が通常とは異なり、sshd_configを以下のようにしている場合(OpenSSH デフォルト)、専用の場所に保存されていることが問題の背景としてあった。修正としては、ユーザのホームディレクトリではなく、専用の場所に公開鍵を正しく配置することが必要である。
# ...
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# ...
- ユーザ配下に配置される SSH サーバーの公開鍵設定の場所
# [UserName] は適宜置き換えること
C:\Users\[UserName]\.ssh\authorized_keys
- Administrators グループに属しているアカウントにおける SSH サーバーの公開鍵設定の場所
C:\ProgramData\ssh\administrators_authorized_keys
確認したほうがよさそうなファイヤウォール設定
Windows では、ネットワークをパブリックとプライベートの2つに分けて設定を使い分けられるようになっている。接続がうまくいかない場合、SSH サーバーとしている Win 機のネットワーク接続設定にて既存の接続をプライベート扱いにすることによって信頼するように設定したり、以下の画像に示すようなファイヤウォールの設定を追加でした方がよいかもしれない。
関係ありそうな記事
使った画像とか
- OAOV, Public domain, via Wikimedia Commons
https://commons.wikimedia.org/wiki/File:Windows_logo_-_2021.svg (2026年10月9日) - OpenSSH
https://www.openssh.org/ (2026年10月9日) - Windows 7 (Vista) のシステムアイコン (2026年10月9日)
- PC のアイコン
- ノートPCのアイコン
- 鍵のアイコン
- ハブのアイコン
参考にしたサイトとか
-
How to Enable and Configure SSH Server on Windows with OpenSSH | Windows OS Hub
https://woshub.com/connect-to-windows-via-ssh/ (2026年10月9日) -
Get started with OpenSSH Server for Windows | Microsoft Learn
https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui&pivots=windows-server-2025 (2026年10月9日) -
OpenSSH Server Configuration for Windows | Microsoft Learn
https://learn.microsoft.com/en-us/windows-server/administration/OpenSSH/openssh-server-configuration (2026年10月9日) -
Releases · PowerShell/Win32-OpenSSH
https://github.com/PowerShell/Win32-OpenSSH/releases/ (2026年10月9日) -
How to Allow Ping (ICMP Echo Requests) on Windows Firewall
https://theitbros.com/allow-ping-icmp-echo-requests-on-windows-firewall/ (2026年10月9日)