Windows 10のSSHサーバーを有効にする

#93
2024.1.29

最近のWindowsには、SSHサーバーが公式で用意されているので、それを使えば比較的簡単にWindowsマシンをSSHサーバーにすることができる。基本的には公式のドキュメントに従えば良いが、公開鍵認証の設定でハマったのでメモ。

SSHサーバーをインストールする

「設定」の「オプション機能」から、「OpenSSH サーバー」をインストールする。自分の場合はすでに入っていた。

SSHサーバーを有効化する

「サービス」を開いて"OpenSSH SSH Server"を有効化する。ついでにスタートアップ時に起動するようにしておく。

ポートを解放する

「セキュリティが強化された Windows Defender ファイアウォール」(文字通り)を開き、TCP22番ポートを解放するのだが、これまたすでに設定が存在していたので、そのままで良い(インストール時に自動的に作られているのかもしれない)。

この時点で、ssh username@xxx.xxx.xxx.xxxとすると、パスワードによるログインが行えるはず。

公開鍵を配置する

すでに鍵ペアはクライアント上で作成していて、公開鍵が~/.ssh/id_ecdsa.pubにあると仮定する。ssh-copy-idだとうまくいかなかったので(管理者だからだろうか)、scpを使って公開鍵を送信する。

% scp ~/.ssh/id_ecdsa.pub username@xxx.xxx.xxx.xxx:~

これで、公開鍵がユーザーのホームディレクトリに転送される。

ここからが少し厄介。ログイン対象のユーザーが管理者なのか、そうでないのかで鍵を置く場所が異なる。

管理者ならば、鍵をC:\ProgramData\ssh\administrators_authorized_keysに配置する。

> type id_ecdsa.pub >> C:\ProgramData\ssh\administrators_authorized_keys

加えて、PowerShellを管理者モードで開き、

> icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F" 

を実行してadministrators_authorized_keysのアクセス権を変更する。これを忘れると、公開鍵でログインすることができない。詳しくはこのページを参照。次回鍵を追加する場合には、管理者権限が必要となることに注意。

管理者でないならば、鍵をC:\Users\(username)\.ssh\authorized_keysに配置するだけでよい(はず。試していない)

> mkdir .ssh
> type id_ecdsa.pub >> .ssh\authorized_keys

公開鍵ログインを有効化し、パスワードロクインを無効化する

管理者権限でコマンドプロンプトを開き、sshd_configを編集する(エディタはなんでも良い)。

> nano C:\ProgramData\ssh\sshd_config

PubkeyAuthenticationの行のコメントを外し、PasswordAuthentication noをその下に付け加える。

PubkeyAuthentication yes
PasswordAuthentication no

「サービス」からSSHサーバーを再起動すると、無事公開鍵でログインが行えるはずである。

参考