VPS やクラウドサーバーを触り始めると、必ず出てくるのが SSH鍵 です。
- 「よくわからないけど、とりあえず作った」
- 「デフォルトのまま使っている」
- 「名前を付けた方がいいの?付けない方がいいの?」
この記事では、
SSH鍵の基礎 → 実際の操作 → 実務での考え方までを、
初心者にもわかる形で整理します。
SSH 鍵の基本
SSH鍵は、サーバーに安全にログインするための「鍵」です。
パスワード認証との違い
| 項目 | パスワード | SSH鍵 |
|---|---|---|
| 覚える必要 | ある | ない |
| 強度 | 人間依存 | 数学的に非常に強い |
| 総当たり攻撃 | 受けやすい | ほぼ不可能 |
| 実務利用 | ❌ 非推奨 | ✅ 推奨 |
現在の VPS / クラウド運用では、SSH鍵認証が標準です。
SSH鍵は「ペア」で動く
SSH鍵は 2つで1組 です。
秘密鍵(自分のPCに置く)
公開鍵(サーバーに登録する)秘密鍵は絶対に外に出さずに、.sshフォルダに保存しておきます。
一方の公開鍵は、サーバーにおきます。
SSH鍵を作成する方法
ssh-keygen -t ed25519
# 実行後に、次が表示される
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/Users/you/.ssh/id_ed25519):表示されてからEnterボタンを押すと、デフォルト名 id_ed25519 で作成します。
ここで名前を入力すると、任意の名前で作成されます。
デフォルト名・任意の名前のどちらを採用するかについては、次の基準で決めると良いです。
デフォルト名で作成する場合
SSH 接続する際に、次の簡単なコマンドで接続できます。
ssh user@server設定が少なく済むので、初めて SSH 接続をしてみる方などにはおすすめです。
ssh は、自動的に次の名前の鍵を探すので、エージェントが勝手に読み込んでくれます。
~/.ssh/id_ed25519
~/.ssh/id_rsa任意の名前をつけて作成する場合
一つの鍵で、複数の用途に利用していると「漏洩したときに全滅」になりますし、何かあったときにすべて鍵を入れ替えになってしまいます。
なので、基本的には「1用途 = 1鍵」にしておくと安心です。
鍵の作成コマンドは、次のようになります。
ssh-keygen -t ed25519 -f ~/.ssh/id_xvps_prod公開鍵をサーバーに登録する方法
まずはサーバーに登録する鍵の情報を表示しましょう。
cat ~/.ssh/id_xvps_prod.pubVPS 側に登録
以下のコマンドで、サーバーに鍵を登録します。
ssh-copy-id -i ~/.ssh/id_xvps_prod.pub user@server任意の名前をつけた鍵は、ssh/configを活用する
名前をつけると、次のコマンドが面倒になります。
ssh -i ~/.ssh/id_xvps_prod user@serverこれを解決するのが ~/.ssh/config です。
Host xvps-prod
HostName 210.xxx.xxx.xxx
User ubuntu
IdentityFile ~/.ssh/id_xvps_prod
IdentitiesOnly yesこれを設定しておけば、次のコマンドでSSH 接続できます。
ssh xvps-prodデフォルト名の鍵と同じ感覚で使えても、鍵は用途ごとに分離されている状態にできます。
SSH鍵の設定をステップバイステップで解説
この記事は「VPSにSSH鍵でログインできる状態」を作り、さらに 鍵を用途別に分けて ~/.ssh/config で楽に運用するところまでを、手順通りにまとめます。
1. SSH が入っているか確認
macOS / Linux は基本入っています。
ssh -V
# 表示例: OpenSSH_9.6p1, LibreSSL 3.3.62. 用途別に SSH 鍵を作る
ここでは「VPS本番用」という想定で id_xvps_prod を作ります。
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id_xvps_prod実行するとこんな感じになります。
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/you/.ssh/id_xvps_prod
Your public key has been saved in /Users/you/.ssh/id_xvps_prod.pubパスフレーズをつけるかどうかは、大きく次の観点で判断します。
- 個人PCで使うなら 付けるのがおすすめ
- CIや完全自動化なら 付けない場合もある
迷ったらつける方針にすると、間違いがありません。
3. サーバーにセットする公開鍵を確認
cat ~/.ssh/id_xvps_prod.pub
# 出力例: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@your-mac出力されたものは公開鍵なので、これをコピーしましょう。
3. サーバーに公開鍵を登録する
方法は2つあります。
方法A(推奨):ssh-copy-id が使える場合
ssh-copy-id -i ~/.ssh/id_xvps_prod.pub ubuntu@210.xxx.xxx.xxx成功すると(環境で文言は違いますが)だいたいこんな表示です:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ubuntu@210.xxx.xxx.xxx'"方法B:手動で登録(VPS管理画面やコピペ)
- サーバーに一旦ログイン(パスワードなど)
~/.ssh/authorized_keysに追記
サーバー側で以下を実行します。
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keysそこに 公開鍵1行 を貼り付けて保存。
最後に以下を実行しましょう。
chmod 600 ~/.ssh/authorized_keys4. 鍵でログインできるかテスト
-i を明示して、まず確実に通します。
ssh -i ~/.ssh/id_xvps_prod ubuntu@210.xxx.xxx.xxx成功するとログインできます。
5. ~/.ssh/config を作って「毎回 -i しない」運用へ
ここが本題です。名前付き鍵でも、デフォルトと同じ操作感にします。
nano ~/.ssh/config
chmod 600 ~/.ssh/config中身は次のようにしましょう。
Host xvps-prod
HostName 210.xxx.xxx.xxx
User ubuntu
IdentityFile ~/.ssh/id_xvps_prod
IdentitiesOnly yesHost xvps-prodはショートカット名(好きに付けてOK)IdentitiesOnly yesは この接続でこの鍵だけ使う(実務で重要)
6. ショートカット名でログインしてみる
ssh xvps-prodこれで通ればOK。
以後、あなたは ssh xvps-prod だけで接続できます。
7. サーバー側でパスワードログインを無効化
サーバーで次を実行します。
sudo nano /etc/ssh/sshd_config以下の記載がなけば追記しましょう。
PasswordAuthentication no
PermitRootLogin no最後に変更内容を反映しましょう。
sudo systemctl restart ssh8. 鍵が増えた時の増やし方
GitHub用、検証用、などを増やす時は同じ流れで実施します。
例えば GitHub 用の鍵を作る場合には次のコマンドです。
ssh-keygen -t ed25519 -f ~/.ssh/id_github~/.ssh/config に次を追加しましょう。
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github
IdentitiesOnly yesGitHub に接続できたかの疎通確認をします。
ssh -T git@github.com成功すると、次のようなメッセージが表示されます。
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.Q&A
どの鍵を使ったかを確認したい場合
どの鍵かを表示するには、次のコマンドを実行します。
ssh -v xvps-prod
# 出力例: Offering public key: /Users/you/.ssh/id_xvps_prod
# Authentication succeeded (publickey).これで、目的の鍵が使われているのを確認できます。
SSH鍵のパスフレーズについて
鍵作成時に、パスフレーズを入れるか聞かれます。
Enter passphrase (empty for no passphrase):考え方としては、次のとおり。
| 環境 | 推奨 |
|---|---|
| 個人PC | 設定する |
| CI / 自動化 | 設定しない |
| 本番サーバー鍵 | 状況次第 |
後からパスフレーズなしに変更もできるので、基本的には設定するのが望ましいです。
コメント