OpenSSH サーバ

OpenSSHサーバを有効にすると、Linuxサーバのようにssh経由でWindows 11にリモートログインできる。設定アプリケーションから「アプリ」→「オプション機能」→「機能を表示」→「OpenSSHサーバー」にチェック→「次へ」→「インストール」を選択し、システムを再起動してOpenSSHサーバを有効化する。

次のように設定ファイルを作成する。

設定ファイルC:\ProgramData\ssh\sshd_configの作成と編集

copy C:\WINDOWS\SYSTEM32\OPENSSH\sshd_config_default C:\ProgramData\ssh\sshd_config
notepad C:\ProgramData\ssh\sshd_config

設定ファイルC:\ProgramData\ssh\sshd_configの編集内容

C:\ProgramData\ssh>fc /n C:\Windows\System32\OpenSSH\sshd_config_default C:\ProgramData\ssh\sshd_config
Comparing files C:\WINDOWS\SYSTEM32\OPENSSH\sshd_config_default and C:\PROGRAMDATA\SSH\SSHD_CONFIG
***** C:\WINDOWS\SYSTEM32\OPENSSH\sshd_config_default
   86:
   87:  Match Group administrators
   88:         AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
***** C:\PROGRAMDATA\SSH\SSHD_CONFIG
   86:
   87:  #Match Group administrators
   88:  #       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
*****

C:\ProgramData\ssh\sshd_configファイルの最後の2行を上記差分データのようにコメントする。元の設定のままでは、C:\ProgramData\ssh\administrators_authorized_keysをチェックしに行った後で公開鍵認証そのものが無効になり、${HOME}.ssh\authorized_keysに公開鍵を配置しておいても使われない。${HOME}.ssh\authorized_keysに公開鍵を追加して使えるようにするには、上記のようにMatch Group administratorsの設定を無効化しておく必要がある。

設定を変更したらOpenSSHサーバ(sshd)を起動する。

OpenSSHサーバの起動

Start-Service sshd
  • OpenSSHサーバの動作を確認

    OpenSSHサーバの動作を確認

Windows 11起動時に自動的にOpenSSHサーバが起動するように、次のコマンドを実行する。

Windows 11起動時に自動的にOpenSSHサーバが起動するように設定

Set-Service -Name sshd -StartupType 'Automatic'

次のコマンドを実行してファイアウォールのルールを表示させ、外部からWindows 11へアクセスできることを確認する。

OpenSSHサーバに関するファイアウォールのルールを確認

Get-NetFirewallRule -Name *ssh*

外部からOpenSSHサーバへアクセスできない設定になっている場合、次のようなコマンドでOpenSSHサーバへアクセスするための設定を追加する。

OpenSSHサーバへアクセスするためのルールを追加

New-NetFirewallRule -Name  -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

OpenSSHサーバを起動したあとで設定ファイルを編集した場合、次のコマンドでOpenSSHサーバを再起動する。

OpenSSHサーバの再起動

Restart-Service sshd

次のコマンドを実行して、リモートログインしてきたユーザーのデフォルトシェルをPowerShell 7へ変更する。

リモートログインしてきたユーザーのデフォルトシェルをPowerShell 7へ変更

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

リモートログインを許可するホストの公開鍵を${HOME}.ssh\authorized_keysへ追加しておく。

OpenSSH クライアント

OpenSSHクライアントを有効にすると、Windows 11からLinuxサーバなどにリモートログインできる。OpenSSHクライアントは設定アプリケーションから「アプリ」→「オプション機能」→「機能を表示」→「OpenSSHクライアント」にチェック→「次へ」→「インストール」を選択して有効化する。Windows Terminalでsshコマンドを実行できるか確認する。環境変数Pathの変更が反映されていない場合、いったんシステムを再起動してから確認する。

ssh-keygenコマンドを実行して秘密鍵と公開鍵を生成する。

秘密鍵と公開鍵を設定

ssh-keygen

リモートログインしたいホストの~/.ssh/authorized_keysへ公開鍵を登録しておく。

  • Windows 11のsshコマンドでほかのWindows 11へリモートログインしたサンプル

    Windows 11のsshコマンドでほかのWindows 11へリモートログインしたサンプル

sshコマンドで設定した他のホストへリモートログインできるか確認する。

アプリケーションのセットアップは記録しておく

アプリケーションのインストールと設定についてすべて記録するのは大変であり面倒だ。しかし、この記録があるのとないのとでは、再インストールしや再セットアップの時の手間が変わってくる。すぐに同じ状態にできることがわかっていれば、アンインストールもそれほど躊躇しなく実施できるようにもなる。

こうしたアプリのセットアップ作業はある程度まとめて一斉にやっておくとよい。新しいWindows 11搭載PCを購入した段階で一気に作業しよう。