Windows 11 ProでOpenSSHの鍵認証を設定してみたのでそのメモ。
サーバの管理をしていると、SSHサーバを踏み台として(ポートフォワーディングを使って)、サーバを管理することが多いと思います。
これまで、踏み台のSSHサーバは、Linuxで構築していたと思います。
WindowsもOpenSSHが簡単?にインストールすることができるようになりましたので、OpenSSHでポートフォワーディングを使ってみようと思い、OpenSSHの鍵認証を試したのでそのメモ。
下記を参考にしました。
・Windows 用 OpenSSH の概要
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell
・Windows 用 OpenSSH でのキーベースの認証
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_keymanagement
・Windows Server および Windows 用 OpenSSH サーバーの構成
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_server_configuration
OpenSSHをインストールする
初めにOpenSSHをインストールします。
「設定」を開き「アプリ」を選択して「オプション機能」からインストールできますが、「オプション機能」が表示されない場合があるようです。
そこで、今回はPowerShellでコマンドを実行して、インストールします。
OpenSSHがインストールされているか確認する
PowerShellを管理者として実行します。
「検索」欄に"power"と入力します。
候補に「Windows PowerShell」が表示されますので、右側のメニュー「管理者として実行する」をクリックします。
PowerShellで下記のコマンドを実行して、「OpenSSH」がインストールされているかを確認します。
OpenSSHクライアントはインストールされていますが、OpenSSHサーバはインストールされていません。
OpenSSHをインストールする
PowerShellを管理者として実行します。
PowerShellで下記のコマンドを実行して、OpenSSHサーバをインストールします。
OpenSSHクライアントをインストールする場合は下記のコマンドを実行します。
OpenSSHの初期設定
OpenSSHサーバはサービスとして動作しますので、サービスの起動が必要です。
また外部からSSHサーバにアクセスするにはファイアウォールの設定も必要です。PowerShellからインストールすると、ファイアウォールは自動で設定されるようです。
OpenSSHサーバのサービス起動します。
サービス一覧で「OpenSSH SSH Server」を選択して「開始」します。
(「OpenSSH Authentication Agent」は無効のままでもOK。)
次にファイアウォールの設定を確認します。
ファイアウォールの「受信の規則」で「OpenSSH SSH Server (sshd)」の規則が有効になっていることを確認します。
無効になっている場合は、有効にします。
パスワード認証でSSH接続する
鍵認証でSSH接続する前に、パスワード認証で接続してみます。
パスワード認証は標準で許可されているので、まずはパスワード認証できるか確認します。
アクセスするユーザアカウントの作成
SSHでアクセスするユーザアカウントを、SSHサーバが稼働しているPCに作成します。
ここでは例としてユーザ「sshtest」を作成しています。
パスワード認証でSSH接続する
コマンドプロンプトを起動します。
下記のコマンドでSSHサーバに接続します。
コマンドを実行すると、そのSSHサーバに初めて接続するときは、下記のメッセージが表示されます。
その後、「sshtest@localhost's password:」とパスワードが聞かれますので、パスワードを入力します。
ログインに成功すると、コマンドプロンプトが下記のような画面に切り替わります。
鍵認証(Ed25519)でSSH接続する
鍵認証でSSH接続してみます。
ユーザーキーの作成
SSHサーバにアクセスするユーザアカウントは、先ほどパスワード認証で作成したユーザ「sshtest」を使用します。
ユーザ「sshtest」が認証に使用する使用する鍵を作成します。
※鍵生成のコマンドを実行すると、実行しているユーザのフォルダ内に生成されます。すでに鍵がある場合は上書きされますので注意してください。
※鍵の生成は任意のユーザで実施して構いません。後から鍵のファイルを移動できます。
鍵を生成するには、PowerShellを起動して、下記のコマンドを実行します。
一部のSSHクライアントでは、空のパスフレーズに対応していないようですので、適当な文字列を入力しておきます。
実行結果
塗りつぶしている箇所には、「C:\\Users\」の後ろはコマンドを実行したユーザ名が表示されます。
「SHA256:」の後ろにはハッシュが表示され、その後ろには「ユーザ名@ホスト名」が入表示されます。
これで鍵が生成されました。
鍵ファイルの保存場所ですが、コマンドを実行したユーザが「aaa」の場合は、フォルダ「C:\Users\aaa\.ssh」に保存されています。
※ファイル「C:\Users\aaa\.ssh\id_ed25519」は秘密鍵のファイル。
生成した秘密鍵を使用してユーザ「sshtest」としてログインしたいので、
生成した公開鍵ファイル「C:\Users\aaa\.ssh\id_ed25519.pub」を、SSHサーバのユーザ「sshtest」のフォルダにコピーします。
このとき、ファイル名を「authorized_keys」に変更します。
C:\Users\aaa\.ssh\id_ed25519.pub
↓ コピーする
・SSHサーバ上での公開鍵ファイルのパス
C:\Users\sshtest\.ssh\authorized_keys
鍵ファイルのアクセス権の設定
ユーザ「sshtest」のSSHサーバ上での公開鍵ファイル「authorized_keys」のアクセス権を変更します。
フィアルへのアクセス権は下記ユーザのみに限定します。他のユーザが含まれているときは、そのユーザのアクセス権を削除します。
・SYSTEM
・Administrators
・sshtest
ファイルの所有者をユーザ「sshtest」に変更します。
鍵ファイルへのアクセス権が適切で無い場合は、SSH接続に失敗します。
後述のSSHサーバサービスのログ出力で確認すると、下記のログが記録されます。
鍵認証でSSH接続する
コマンドプロンプトを起動します。
下記のコマンドでSSHサーバに接続します。
SSHサーバ上で、SSHクライアントを起動して、自身のSSHサーバに接続できるかを試しています。
※秘密鍵のファイル名は「id_ed25519」から「id_ed25519_sshtest」に変更しています。
コマンドを実行すると、パスフレーズが聞かれますので、鍵生成時に入力したパスフレーズを入力します。
ログインに成功すると、パスワード認証と同じように、コマンドプロンプトが下記のような画面に切り替わります。
接続できないときは?
SSHサーバのログ出力をして原因を特定しましょう。
SSHサーバの設定ファイルは下記になります。
#SyslogFacility AUTH
#LogLevel INFO
設定のカスタマイズ
SSH接続を許可するユーザを限定したい場合や、鍵認証のみ許可してパスワード認証をさせたくない場合などの設定は、SSHの設定ファイル「C:\ProgramData\ssh\sshd_config」を変更します。
パスワード認証をさせたくない場合は、設定ファイルの下記「#PasswordAuthentication yes」の箇所を「PasswordAuthentication no」に変更します。
#PasswordAuthentication yes
#PermitEmptyPasswords no
接続を許可するユーザを設定するときは、「AllowUsers <ユーザ名>」を追加します。
設定ファイルの記述の仕方については、下記が参考になります。
・Windows Server および Windows 用 OpenSSH サーバーの構成
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_server_configuration
これで、Windows 11 ProでOpenSSHの鍵認証を設定できました。