VPSにSSH鍵でログインする準備|Windowsでed25519の鍵を作って確かめた
VPSにSSHで入る時、パスワードではなくSSH鍵を使うと、パスワードを推測される攻撃を避けやすくなります。この記事では、Windowsに入っているOpenSSH(筆者のPCでは追加の導入なしで使えました)で鍵のペアを作り、何ができるのかを、筆者のPCで実際に鍵を作って確かめた結果とあわせて説明します。
(確認:筆者のPC(Windows 11)のOpenSSH 10.2p1で、一時フォルダに試験用の鍵を作って確認し、試験用の鍵は削除しました。VPS側の設定(公開鍵の登録画面など)は、特定のサービスで試していません)
鍵のペアを作る
ssh-keygen -t ed25519 -C "my-vps-key"
OpenBSDのマニュアルによると、-tで指定できる鍵の種類は ecdsa・ed25519・rsa などで、ed25519が既定です(最新のマニュアルの記載。古いバージョンのOpenSSHでは既定が違うので、-t ed25519 と明示します)。実行すると、保存先(既定は ~/.ssh/id_ed25519)とパスフレーズを聞かれます。パスフレーズは入れるのがおすすめです。秘密鍵のファイルが盗まれても、すぐには使われません。
筆者のPCで試験用の鍵(パスフレーズなし)を作ると、次の2つのファイルができました。
| ファイル | 中身 | 扱い |
|---|---|---|
| id_test(秘密鍵) | 約400バイト | 他人に渡さない・どこにもアップロードしない(バックアップは安全な場所に) |
| id_test.pub(公開鍵) | 約100バイト。ssh-ed25519 AAAA… コメント の1行 |
サーバーに登録する。見られても問題ない |
指紋(フィンガープリント)で鍵を見分ける
ssh-keygen -lf id_test.pub
256 SHA256:En0SEGrWnHXaRgpRJbqybRj0HTIdUaunvEPw50I1tOs test-key-for-article (ED25519)
これは試験用の鍵の指紋(削除済み)です。同じ形式で4096ビットのRSA鍵を作ると、4096 SHA256:… (RSA) と表示されました。指紋は、サーバーに登録した公開鍵が、自分の鍵と同じかを確かめる時に使います。
サーバーに公開鍵を登録する
Linuxのサーバーでは、公開鍵の1行を、接続するユーザーの ~/.ssh/authorized_keys に追記します。OpenSSHのsshdには StrictModes という設定があり、ユーザーのファイルやホームのディレクトリの権限が緩い(他人が書き込める)と、ログインを受け付けません。マニュアルでは、既定は yes と書かれています。公開鍵を登録してもログインできない時は、まず権限を疑います。
Windows Serverの場合、Microsoft Learnには、管理者アカウントの公開鍵は administrators_authorized_keys というファイルに置き、このファイルのACLは管理者とSYSTEMだけに許可すると書かれています。
Windowsで鍵をエージェントに預ける
毎回パスフレーズを入れなくて済むように、Windowsの ssh-agent に秘密鍵を預けられます。Microsoft Learnによると、ssh-agentサービスは既定では無効で、管理者のPowerShellで次のようにします。
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
同じページには、秘密鍵を安全な場所にバックアップし、エージェントに追加した後はファイルを削除することをおすすめする、とも書かれています(削除する前に、バックアップを別の場所に保管できていることを確かめてから行います)。ただし、秘密鍵を失うと、新しい鍵のペアを作って、すべてのシステムの公開鍵を入れ替える必要があります。
VPSで使う時の流れ
- 手元のPCで鍵のペアを作る(秘密鍵は動かさない)
- VPSの管理画面で、公開鍵を登録する(XServer VPSの公式サイトの機能一覧には「SSH Key」が載っています。登録画面は筆者が確認していないため、サービスの案内に従ってください)
- パスワードでのログインを止める前に、別のウィンドウで鍵でのログインを確かめる(入れなくなった時のために、会社のコンソールからの接続方法も確認しておく)
鍵でログインできることを確認してから、パスワード認証を無効にします。接続元のIPを絞る方法はWindowsファイアウォールで接続元を絞る方法、Linux系VPSの全体像はXServer VPS(Linux)の使い道と料金にあります。
この記事で確かめていないこと
- 特定のVPS会社の管理画面での鍵の登録方法
- Linuxサーバーでの
chmodの具体的な値(OpenSSHの一般的な説明で、この記事では実機で確認していません) - FIDO対応の鍵(ed25519-sk)
まとめ
- SSH鍵は
ssh-keygen -t ed25519で作る(ed25519が既定)。パスフレーズを入れる - 秘密鍵は渡さない。公開鍵だけをサーバーに登録する。指紋で鍵を見分けられる
- 公開鍵を登録してもログインできない時は、StrictModes(既定はyes)による権限の確認を行う
- パスワード認証を止める前に、別の窓口で鍵でのログインを確かめる
本記事は鍵の作り方と考え方の説明です。秘密鍵やパスワードを他人に渡したり、公開の場所に置いたりしないでください。


