概要
この記事では、SSH公開鍵認証を使用してサーバへ安全に接続するためのクライアント側設定手順を解説します。WindowsとLinuxの両方を対象にしています。
前提条件
- SSHクライアントは標準でインストール済み(Windows 10以降、Linux標準)
- 接続先サーバが公開鍵認証を許可していること
- サーバ側ユーザーが存在していること
鍵タイプと暗号化方式
SSHで使用される代表的な鍵タイプにはRSA、ECDSA、Ed25519があります。以下の表でそれぞれの特徴や推奨用途、互換性を比較します。
| 鍵タイプ | 特徴 | 推奨用途 | 互換性 |
|---|---|---|---|
| RSA | 古くから広く使われている。鍵長を調整可能で汎用性が高い。 | 互換性重視の環境や既存システム | 非常に高い |
| ECDSA | 楕円曲線暗号を用い、RSAより短い鍵長で高速。 | パフォーマンス重視の環境 | 中程度 |
| Ed25519 | 新しい標準で高速かつ安全性が高い。鍵サイズが小さい。 | 新規導入やセキュリティ重視環境 | 最新のSSHクライアントで対応 |
Ed25519は現在の新標準として推奨されており、OpenSSH 6.5(2014年リリース)以降のSSHクライアント・サーバで対応しています。RSAは依然として広く使われ、古い機器やFIPS準拠環境では主流です。ECDSAはその中間的な位置づけです。
変数表記について
本記事では、環境依存の値を以下のように表記しています。実際の環境に合わせて読み替えてください。
| 変数名 | 設定例 | 備考 |
|---|---|---|
<<USERNAME>> |
exampleuser |
クライアント(自分の端末)のログインユーザー名 |
<<SERVER>> |
192.168.1.10 |
接続先ホスト名またはIPアドレス |
<<USER>> |
ubuntu または ec2-user |
サーバ側でSSH接続に使用する一般ユーザー名 |
<<EMAIL_ADDRESS>> |
user@example.com |
鍵コメントに使用するメールアドレス(任意) |
Windows環境での実行について
本記事のWindows向けコマンドはすべて PowerShell を想定しています。
PowerShellで実行できない場合のみ、コマンドプロンプト(cmd.exe)を使用してください。
その際、$env:USERPROFILEは%USERPROFILE%に置き換えてください。
Windows クライアントの場合
Step 1: 秘密鍵と公開鍵の生成
PowerShellを管理者で開き、ssh-keygenコマンドで鍵ペアを生成します。
ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"
※ 「-C」オプション(コメント)は任意です。用途や所有者識別のために使用できますが、設定しなくても動作に影響はありません。
※ 本手順では自動化や利便性を重視し、パスフレーズなしで鍵を作成します。
出力例:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/C:/Users/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Your identification has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519
Your public key has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519.pub
公開鍵:
$env:USERPROFILE\.ssh\id_ed25519.pub
秘密鍵:$env:USERPROFILE\.ssh\id_ed25519
Step 2: 公開鍵をサーバにコピー
以下のコマンドで公開鍵をサーバの authorized_keys に直接追記します。
cat $env:USERPROFILE\.ssh\id_ed25519.pub | ssh <<USER>>@<<SERVER>> "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"
または内容をコピーして、サーバ上の~/.ssh/authorized_keysに手動で追記します。
Step 3: 接続確認
ssh -i $env:USERPROFILE\.ssh\id_ed25519 <<USER>>@<<SERVER>>
初回接続時の場合はフィンガープリント確認が表示されます。「yes」と入力して続行します。
Linux クライアントの場合
Step 1: 鍵ペアの生成
ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"
※ 「-C」オプション(コメント)は任意です。用途や所有者識別のために使用できますが、設定しなくても動作に影響はありません。
※ 本手順では自動化や利便性を重視し、パスフレーズなしで鍵を作成します。
出力例:
Enter file in which to save the key (/home/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
公開鍵:
~/.ssh/id_ed25519.pub
秘密鍵:~/.ssh/id_ed25519
Step 2: 公開鍵をサーバへ登録
ssh-copy-idコマンドで自動登録が可能です。
ssh-copy-id -i ~/.ssh/id_ed25519.pub <<USER>>@<<SERVER>>
初回接続時の場合はフィンガープリント確認が表示されます。「yes」と入力して続行します。
または内容をコピーして、サーバ上の~/.ssh/authorized_keysに手動で追記します。
Step 3: 接続確認
ssh -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>
パスフレーズ付きSSH鍵を使うための準備
パスフレーズ付きのSSH鍵を使用する場合は、毎回入力を避けるためにSSHエージェントを設定します。SSHエージェントは秘密鍵をメモリ上に保持し、認証時に自動で署名を行うクライアント側のサービスです。
Step 1: SSHエージェントの起動
Windows:
Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent
Linux:
eval "$(ssh-agent -s)"
自動起動設定
Windows:
Set-Service -Name ssh-agent -StartupType Automatic
Linux:
デスクトップ環境を使用している場合は自動で起動しますが、サーバ環境などで手動設定する場合は~/.bashrcまたは~/.profileに以下を追記します。
eval "$(ssh-agent -s)" > /dev/null
これによりログイン時に自動的にSSHエージェントが有効になります。
Step 2: 鍵の登録
Windows:
ssh-add $env:USERPROFILE\.ssh\id_ed25519
Linux:
ssh-add ~/.ssh/id_ed25519
登録時にパスフレーズを一度入力すれば、その後の接続では入力不要になります。
Step 3: 登録状態の確認
ssh-add -l
出力に鍵のフィンガープリントが表示されれば登録完了です。
SSHクライアント設定ファイル(config)の活用
毎回コマンドでユーザー名や鍵ファイルを指定するのは手間がかかります。~/.ssh/config(Windowsでは C:\Users\<<USERNAME>>\.ssh\config) に接続設定を記述しておくことで、接続を簡略化できます。
設定例
Host myserver
HostName <<SERVER>>
User <<USER>>
IdentityFile ~/.ssh/id_ed25519
Port 22
Windowsの場合は、
IdentityFileのパスを$env:USERPROFILE\.ssh\id_ed25519に変更してください。
利用方法
上記設定を追加した後は、以下のように簡単に接続できます。
ssh myserver
複数サーバーを管理する場合
複数のサーバーを扱う場合は、Host セクションを複数定義することで、ホストごとの設定を切り替えられます。
Host web
HostName 192.168.1.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Host db
HostName 192.168.1.11
User ec2-user
IdentityFile ~/.ssh/id_ed25519
この方法により、毎回の接続でユーザー名や鍵ファイルを指定する必要がなくなり、運用効率が向上します。
補足:鍵の使い分けについて
この記事では便宜上、同一の鍵ファイル(
id_ed25519)を複数のサーバーで使用する例を示しています。
実運用では、サーバーや用途ごとに異なる鍵を生成・管理することを推奨します。複数の鍵を使用する場合は、
~/.ssh/configにホストごとにIdentityFileを指定することで安全かつ柔軟に管理できます。
設定の検証
クライアントで以下のオプションを使用して詳細ログを確認できます。
ssh -vvv -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>
debug1: Authentication succeeded (publickey) が表示されれば成功です。
トラブルシューティング
SSH接続が失敗する場合、主な原因は以下の3つに分類されます。
-
サーバ側で鍵認証が許可されていない
サーバ設定でPubkeyAuthenticationが無効、または古いSSH実装を使用している場合に発生します。 -
鍵の登録が不完全または不一致
クライアントの公開鍵がサーバのauthorized_keysに正しく登録されていない、または誤ったユーザーのホームディレクトリに配置されている場合に発生します。 -
接続経路またはユーザー指定の誤り
接続先ホスト名・ユーザー名の誤り、または権限の制約により接続が拒否されるケースがあります。
これらのいずれに該当するかを確認することで、原因を切り分けることができます。
まとめ
SSH公開鍵認証を利用すれば、パスワードを使わず安全にサーバへ接続できます。Windows・Linuxどちらでも標準のssh-keygenで簡単に設定でき、鍵管理とパーミッション設定を正しく行うことが重要です。
