WindowsでSSH公開鍵認証を設定する方法

WindowsでSSH鍵認証を設定するのは、特に初めての場合は少し複雑に思えるかもしれません。しかし、コマンドと設定ファイルの使い方に慣れてしまえば、パスワードを何度も入力することなくログインできる、実に便利な方法になります。さらに、正しく設定すればより安全になります。このガイドでは、RSA鍵またはEdDSA鍵の生成、公開鍵のサーバーへのコピー、設定の調整、そしてすべてが確実にロックダウンされていることを確認する手順を詳しく説明します。慣れれば、Windowsマシンや他のサーバーにSSHで簡単に接続できるようになり、毎回煩わしいパスワード入力を求められることもなくなるでしょう。

Windows で鍵を使って SSH 認証を修正する方法

Windows で SSH キーペアを生成する

まず最初に、秘密鍵と公開鍵のペアが必要です。これが鍵ベースのSSHの核となる部分です。Windows 10/11またはWindows Server 2019/2022では、OpenSSHクライアントがまだインストールされていない場合はインストールするのが最も簡単な方法です。PowerShellを使って追加できます。

Add-WindowsCapability -Online -Name OpenSSH. Client~~~~0.0.1.0

古いバージョンの Windows を使用している場合は、代わりに GitHub からWin32-OpenSSHを取得する必要があるかもしれませんが、新しいビルドでは技術的に組み込まれています。

インストールが完了したら、PowerShellウィンドウを開いて(システム関連の作業以外は管理者権限は不要です)、キーを生成します。最近はED25519の方が高速で安全なので、ED25519を使うのが良いと思います。以下のコマンドを実行するだけです。

ssh-keygen -t ed25519

鍵の保存場所を尋ねられますC:\Users\YourUser\.ssh\id_ed25519。デフォルトは です。Enterキーを押してパスを受け入れるか、カスタムパスを指定してください。次にパスフレーズの入力を求められます。正直なところ、私は毎回入力するのを避けるために通常はスキップしますが、誰かがあなたの秘密鍵にアクセスした場合、セキュリティ上のリスクがあります。パスフレーズを設定しないと、誰かがあなたの鍵を見つけた場合、その人もログインできてしまうことを覚えておいてください。

.sshに 2 つのファイルが作成されます: – id_ed25519(秘密鍵、安全に保管してください!) – id_ed25519.pub(サーバーに送信する公開鍵)

その後、作業を​​楽にするために、次のようにして秘密鍵を SSH エージェントに追加します。

set-service ssh-agent -StartupType Automatic Start-Service ssh-agent ssh-add "$env:UserProfile\.ssh\id_ed25519"

一部のマシンでは、初回は正常に動作しない場合があります。必要に応じて再起動するか、サービスを手動で開始してください。そうすることで、接続前に秘密鍵が読み込まれ、すぐに使用できるようになります。

サーバーの設定 – 公開鍵をリモートウィンドウに移動する

id_ed25519.pub次に、アクセスしたいWindowsマシンに を移動する必要があります。OpenSSHを使って別のWindowsマシンに接続する場合は、公開鍵をC:\Users\ username \.ssh\authorized_keysにコピーします。SCP経由でも実行できますが、面倒な場合はコピー&ペーストでも可能です。

scp C:\Users\youruser\.ssh\id_ed25519.pub user@remote-win:/c/Users/user/.ssh/authorized_keys

.sshフォルダとauthorized_keysファイルに適切な権限が設定されていることを確認してください。他のユーザー、特にアクセス権を持たない管理者にこれらのファイルを読み取られるのは望ましくありません。権限を明示的に設定することをお勧めします。

icacls "C:\Users\username\.ssh\authorized_keys" /inheritance:r /grant username:F

スクリプトを使いたい場合は、PowerShell を使ってくださいSet-Acl。また、SSH サーバーの設定をもう一度確認してください。C:\ProgramData\ssh\sshd_configメモ帳で開いて、 がコメントアウトされていないことを確認してくださいPubkeyAuthentication yes。コメントアウトされていない場合は、先頭の # を削除してください。にStrictModes変更して無効にする必要がある場合もあります。Windows では、常に設定を変更する必要があるのはご存じの通りです。#StrictModes yesStrictModes no

SSH接続のテスト – パスワード不要

ここで、次のコマンドを使用して接続を試みます:

ssh [email protected]

鍵が正しく設定されていれば、パスワードを尋ねられることなくログインできるはずです。ただし、秘密鍵にパスフレーズが設定されていないか、エージェントにパスフレーズを追加済みであることが前提です。初回ログイン時は、SSHがホストを信頼するかどうかを尋ねます。「はい」と答えるだけで、以降はそのフィンガープリントを信頼します。アクセス権限が拒否された場合は、公開鍵がauthorized_keysに設定されているか、またアクセス権限が正しいかを再確認してください。設定変更や鍵のコピー後、SSHサービスの再起動が必要になる場合があります。

ボーナスのヒント: キーを明示的に指定することもできます。

ssh [email protected] -i C:\Users\youruser\.ssh\id_ed25519

複数のキーを扱う場合やエージェントを操作したくない場合に便利です。

管理者としてログインする – 特別なトリック

管理者アカウントには、いくつか追加の手順があります。Windowsでは、C:\ProgramData\sshにあるadministrators_authorized_keysファイルを使用します。このファイルに公開鍵を追加し、権限がロックされていることを確認してください。AdministratorsとSYSTEMのみがアクセスできるようにしてください。このファイルのセキュリティを確保するには、 PowerShellのコマンドを使用してください。icaclsGet-AclSet-Acl

パスワードログインを完全に無効にしたい場合は、 を設定PasswordAuthentication nosshd_config、 でSSHサービスを再起動してくださいRestart-Service sshd。ただし、完全にロックアウトされてしまう恐れがあるので、慎重に行ってください。

最後に、ログ

SSHログは、イベントビューアーの「アプリケーションとサービスログ」>「OpenSSH」>「Operational」で確認できます。すべて正常に動作している場合は、次のようなイベントが表示されますsshd: Accepted publickey for username。これは良い兆候です。正常に動作しない場合は、これらのログから、権限、設定エラー、キーの問題など、何が問題だったかがわかります。

全体的に見て、設定には少し忍耐が必要ですが、セキュリティ強化と利便性を考えると、その価値は十分にあります。手順に従って、権限を確認し、秘密鍵を安全に保管してください。すべてがスムーズに動作するようになると、かなり満足感があります。

まとめ

  • SSHキーを生成するssh-keygen
  • 公開鍵をリモートWindowsマシンにコピーする
  • sshd_config公開鍵認証が許可されていることを確認する
  • 適切な権限でauthorized_keysファイルにキーを追加します
  • sshフラグの有無にかかわらず-i接続に使用します

まとめ

このプロセス全体は、特に権限や設定ファイルに関しては少し面倒ですが、一度設定してしまえば、よりクリーンで安全な認証方法になります。基本的に一度設定すれば完了で、次回ログイン時にその効果を発揮します。WindowsでパスワードなしでSSHを動作させようとして行き詰まっている方のお役に立てれば幸いです。頑張ってください。そして、長期的に見て時間の節約になれば幸いです。