「毎回パスワード入力するの面倒くさい…」
「セキュリティを強化したいけど、どうすればいい?」
「公開鍵?秘密鍵?なんか難しそう…」
ちょっと待って!実はSSHキー認証って、思っているよりずっと簡単なんです。
しかも、一度設定すれば:
- パスワード入力が不要になる
- セキュリティが格段に向上する
- 自動化やスクリプト実行が可能になる
今から30分後には、あなたもキー認証のプロになれます。一緒に設定していきましょう!
SSHキー認証の仕組み:鍵と錠前で理解する

パスワード認証 vs キー認証
まず、2つの認証方法の違いを家の鍵に例えて説明します。
パスワード認証:
- 暗証番号式のドアロック
- 番号を知っていれば誰でも開けられる
- 番号を盗み見られるリスクがある
キー認証:
- 物理的な鍵を使うドアロック
- 鍵を持っている人だけが開けられる
- 鍵は複製が難しく、安全性が高い
公開鍵と秘密鍵のペア
SSHキー認証では、2つの鍵を使います:
秘密鍵(Private Key):
- あなただけが持つ「マスターキー」
- 絶対に他人に渡してはいけない
- あなたのMacに保存される
公開鍵(Public Key):
- サーバーに登録する「錠前」
- 他人に見られても問題ない
- 秘密鍵とセットで初めて機能する
この仕組みの素晴らしいところは、公開鍵からは秘密鍵を作れないこと。だから安全なんです!
準備:現在の状態を確認しよう
すでに鍵を持っているか確認
ターミナルを開いて(Command + スペース
→ 「terminal」)、次のコマンドを実行:
ls -la ~/.ssh/
もし以下のようなファイルがあれば、すでに鍵を持っています:
id_rsa
/id_rsa.pub
(RSA鍵)id_ed25519
/id_ed25519.pub
(Ed25519鍵)id_ecdsa
/id_ecdsa.pub
(ECDSA鍵)
「No such file or directory」と表示されたら、鍵はまだありません。作りましょう!
どの種類の鍵を選ぶべき?
2024年現在のおすすめ順:
- Ed25519(最もおすすめ)
- 最新で最も安全
- 短くて速い
- ほとんどのサーバーで使える
- RSA(互換性重視)
- 古いサーバーでも確実に使える
- 4096ビット以上を推奨
- ECDSA(あまり使わない)
- 中間的な選択肢
特別な理由がなければEd25519を選びましょう!
ステップ1:SSHキーペアを生成する
Ed25519鍵の作成(推奨)
ターミナルで以下のコマンドを実行:
ssh-keygen -t ed25519 -C "your_email@example.com"
-C オプション:コメントを追加(メールアドレスを入れると管理しやすい)
対話形式での設定
コマンドを実行すると、いくつか質問されます:
1. 保存場所の指定:
Enter file in which to save the key (/Users/あなた/.ssh/id_ed25519):
→ そのままEnter(デフォルトでOK)
2. パスフレーズの設定:
Enter passphrase (empty for no passphrase):
→ セキュリティ重視ならパスフレーズを設定
→ 利便性重視ならそのままEnter(パスフレーズなし)
パスフレーズって必要?
- 設定する場合:より安全(鍵を盗まれても使えない)
- 設定しない場合:より便利(完全自動化が可能)
3. パスフレーズの確認:
Enter same passphrase again:
→ 同じものを再入力(またはそのままEnter)
生成成功!
こんな表示が出れば成功です:
Your identification has been saved in /Users/あなた/.ssh/id_ed25519
Your public key has been saved in /Users/あなた/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com
そして、アスキーアートが表示されます。これがあなたの鍵の「顔」です!
ステップ2:公開鍵をサーバーに登録する
方法1:ssh-copy-idを使う(最も簡単)
ssh-copy-id ユーザー名@サーバーアドレス
実際の例:
ssh-copy-id admin@192.168.1.100
初回はパスワードを聞かれます。これが最後のパスワード入力になります!
方法2:手動でコピー&ペースト
ssh-copy-idが使えない場合の方法:
1. 公開鍵の内容を表示:
cat ~/.ssh/id_ed25519.pub
2. サーバーにログイン:
ssh ユーザー名@サーバーアドレス
3. authorized_keysファイルに追加:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容をここにペースト" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
方法3:一行でやる魔法のコマンド
cat ~/.ssh/id_ed25519.pub | ssh ユーザー名@サーバー "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
長いけど、コピペして実行するだけでOK!
ステップ3:キー認証で接続テスト
接続してみよう
ssh ユーザー名@サーバーアドレス
パスワードを聞かれずにログインできたら大成功!
もしパスワードを聞かれたら
以下をチェック:
1. 権限設定を確認:
# ローカル(Mac側)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
# サーバー側
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2. 正しい鍵を使っているか確認:
ssh -v ユーザー名@サーバーアドレス
詳細ログで「Offering public key」という行を探します。
Mac特有の便利機能:キーチェーンとの連携
パスフレーズをキーチェーンに保存
パスフレーズを設定した場合、毎回入力するのは面倒。
Macのキーチェーンに保存しましょう:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
一度パスフレーズを入力すれば、次回から自動で読み込まれます。
自動読み込みの設定
~/.ssh/config
ファイルを作成/編集:
nano ~/.ssh/config
以下を追加:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
これで、Mac起動時に自動的に鍵が読み込まれます。
複数のサーバーを管理する:configファイルの活用
SSH設定ファイルの作成
~/.ssh/config
に各サーバーの設定を書いておくと便利:
# 本番サーバー
Host production
HostName 203.0.113.10
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519_prod
# 開発サーバー
Host dev
HostName 192.168.1.100
User developer
Port 2222
IdentityFile ~/.ssh/id_ed25519_dev
# AWSサーバー
Host aws
HostName ec2-xx-xxx-xxx-xx.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ssh/aws-key.pem
接続が超簡単に!
設定後は、こんなに短いコマンドで接続できます:
ssh production # 本番サーバーへ
ssh dev # 開発サーバーへ
ssh aws # AWSへ
長いコマンドを覚える必要なし!
セキュリティを最大限に高める設定
1. 強力な鍵を使う
# RSAを使う場合は4096ビット
ssh-keygen -t rsa -b 4096
# Ed25519なら自動的に強力
ssh-keygen -t ed25519
2. パスフレーズを必ず設定
特に以下の場合は必須:
- 本番サーバーへの接続
- root権限での接続
- 機密情報を扱うサーバー
3. 定期的に鍵を更新
3〜6ヶ月ごとに新しい鍵を生成することを推奨:
# 新しい鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new
# 公開鍵をサーバーに追加
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub ユーザー@サーバー
# 古い鍵を削除(サーバー側で)
ssh ユーザー@サーバー
nano ~/.ssh/authorized_keys # 古い鍵の行を削除
4. サーバー側の設定強化
サーバー側で/etc/ssh/sshd_config
を編集:
# パスワード認証を無効化
PasswordAuthentication no
# rootログインを禁止
PermitRootLogin no
# 空パスワードを禁止
PermitEmptyPasswords no
# キー認証のみ許可
PubkeyAuthentication yes
トラブルシューティング:よくある問題と解決法
問題1:Permission denied (publickey)
原因と解決:
- 権限が間違っている
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*
- 公開鍵が登録されていない
ssh-copy-id ユーザー@サーバー
- 間違った鍵を使っている
ssh -i ~/.ssh/正しい鍵ファイル ユーザー@サーバー
問題2:Agent admitted failure to sign
解決方法:
ssh-add -D # 全ての鍵を削除
ssh-add ~/.ssh/id_ed25519 # 鍵を追加し直す
問題3:Too many authentication failures
原因: 複数の鍵を試して失敗している
解決方法:
ssh -o IdentitiesOnly=yes -i ~/.ssh/特定の鍵 ユーザー@サーバー
問題4:Host key verification failed
解決方法:
ssh-keygen -R サーバーアドレス # 古いホスト鍵を削除
実践的な活用例:キー認証でできること
1. 自動バックアップスクリプト
#!/bin/bash
# 毎日実行される自動バックアップ
rsync -avz ~/Documents/ production:~/backup/
パスワード不要なのでcronで自動実行できます!
2. 複数サーバーへの一括コマンド実行
for server in production dev staging; do
echo "=== $server ==="
ssh $server "df -h"
done
3. Git/GitHubでの利用
# GitHubに公開鍵を登録後
git clone git@github.com:username/repository.git
パスワード入力なしでpush/pullが可能に!
4. VSCodeでのリモート開発
VSCodeの「Remote – SSH」拡張機能で、キー認証を使った快適な開発環境を構築できます。
まとめ:キー認証で変わるあなたのサーバー管理
今日マスターしたことを振り返りましょう:
✅ SSHキー認証の仕組み(公開鍵と秘密鍵)を理解した
✅ Ed25519鍵の生成方法を学んだ
✅ 3つの公開鍵登録方法を習得した
✅ Macのキーチェーン連携で更に便利に
✅ SSH configファイルで接続を簡略化
✅ セキュリティ強化の設定方法を学んだ
✅ トラブル解決のスキルを身につけた
最初は「公開鍵?秘密鍵?」と戸惑うかもしれません。
でも、一度設定してしまえば、もうパスワード入力には戻れません。それくらい快適で安全な方法なんです。
セキュリティと利便性、両方を手に入れたあなたは、もうサーバー管理のプロフェッショナル。
さあ、パスワードレスな新しい世界を楽しんでください!
次のステップにおすすめ:
- SSH Agentの詳細な使い方
- 多段SSH(踏み台サーバー経由)の設定
- YubiKeyなどハードウェアキーでの認証
コメント