\ クリスマスタイムセール祭り開催中! /

SSH鍵とは何か?初心者から本番運用まで理解するSSH鍵の基本と設計思想

VPS やクラウドサーバーを触り始めると、必ず出てくるのが SSH鍵 です。

  • 「よくわからないけど、とりあえず作った」
  • 「デフォルトのまま使っている」
  • 「名前を付けた方がいいの?付けない方がいいの?」

この記事では、
SSH鍵の基礎 → 実際の操作 → 実務での考え方までを、
初心者にもわかる形で整理します。

SSH 鍵の基本

SSH鍵は、サーバーに安全にログインするための「鍵」です。

パスワード認証との違い

項目パスワードSSH鍵
覚える必要あるない
強度人間依存数学的に非常に強い
総当たり攻撃受けやすいほぼ不可能
実務利用❌ 非推奨✅ 推奨

現在の VPS / クラウド運用では、SSH鍵認証が標準です。

SSH鍵は「ペア」で動く

SSH鍵は 2つで1組 です。

Bash
秘密鍵(自分のPCに置く)
公開鍵(サーバーに登録する)

秘密鍵は絶対に外に出さずに、.sshフォルダに保存しておきます。

一方の公開鍵は、サーバーにおきます。

サーバーは、秘密鍵を持っている人だけを通す仕組みです。

SSH鍵を作成する方法

Bash
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 接続する際に、次の簡単なコマンドで接続できます。

Bash
ssh user@server

設定が少なく済むので、初めて SSH 接続をしてみる方などにはおすすめです。

ssh は、自動的に次の名前の鍵を探すので、エージェントが勝手に読み込んでくれます。

Bash
~/.ssh/id_ed25519
~/.ssh/id_rsa

任意の名前をつけて作成する場合

一つの鍵で、複数の用途に利用していると「漏洩したときに全滅」になりますし、何かあったときにすべて鍵を入れ替えになってしまいます。

なので、基本的には「1用途 = 1鍵」にしておくと安心です。

鍵の作成コマンドは、次のようになります。

Bash
ssh-keygen -t ed25519 -f ~/.ssh/id_xvps_prod

公開鍵をサーバーに登録する方法

まずはサーバーに登録する鍵の情報を表示しましょう。

Bash
cat ~/.ssh/id_xvps_prod.pub

VPS 側に登録

以下のコマンドで、サーバーに鍵を登録します。

Bash
ssh-copy-id -i ~/.ssh/id_xvps_prod.pub user@server

任意の名前をつけた鍵は、ssh/configを活用する

名前をつけると、次のコマンドが面倒になります。

Bash
ssh -i ~/.ssh/id_xvps_prod user@server

これを解決するのが ~/.ssh/config です。

Bash
Host xvps-prod
    HostName 210.xxx.xxx.xxx
    User ubuntu
    IdentityFile ~/.ssh/id_xvps_prod
    IdentitiesOnly yes

これを設定しておけば、次のコマンドでSSH 接続できます。

Bash
ssh xvps-prod

デフォルト名の鍵と同じ感覚で使えても、鍵は用途ごとに分離されている状態にできます。

IdentitiesOnly yes
この接続ではこの鍵だけを使え、ということを指定しています。本番運用では必須。

SSH鍵の設定をステップバイステップで解説

この記事は「VPSにSSH鍵でログインできる状態」を作り、さらに 鍵を用途別に分けて ~/.ssh/config で楽に運用するところまでを、手順通りにまとめます。

1. SSH が入っているか確認

macOS / Linux は基本入っています。

Bash
ssh -V

# 表示例: OpenSSH_9.6p1, LibreSSL 3.3.6

2. 用途別に SSH 鍵を作る

ここでは「VPS本番用」という想定で id_xvps_prod を作ります。

Bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id_xvps_prod

※ SSH は ~/.ssh ディレクトリの権限が緩いと、安全でないとして接続を拒否します。
chmod 700は必須です。

実行するとこんな感じになります。

Bash
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. サーバーにセットする公開鍵を確認

Bash
cat ~/.ssh/id_xvps_prod.pub

# 出力例: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@your-mac

出力されたものは公開鍵なので、これをコピーしましょう。

3. サーバーに公開鍵を登録する

方法は2つあります。

方法A(推奨):ssh-copy-id が使える場合

Bash
ssh-copy-id -i ~/.ssh/id_xvps_prod.pub ubuntu@210.xxx.xxx.xxx

成功すると(環境で文言は違いますが)だいたいこんな表示です:

Bash
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'ubuntu@210.xxx.xxx.xxx'"

方法B:手動で登録(VPS管理画面やコピペ)

  1. サーバーに一旦ログイン(パスワードなど)
  2. ~/.ssh/authorized_keys に追記

サーバー側で以下を実行します。

Bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

そこに 公開鍵1行 を貼り付けて保存。

最後に以下を実行しましょう。

Bash
chmod 600 ~/.ssh/authorized_keys

authorized_keys の権限が緩いと、SSH は鍵を無視します。

4. 鍵でログインできるかテスト

-i を明示して、まず確実に通します。

Bash
ssh -i ~/.ssh/id_xvps_prod ubuntu@210.xxx.xxx.xxx

成功するとログインできます。

5. ~/.ssh/config を作って「毎回 -i しない」運用へ

ここが本題です。名前付き鍵でも、デフォルトと同じ操作感にします。

Bash
nano ~/.ssh/config
chmod 600 ~/.ssh/config

中身は次のようにしましょう。

Bash
Host xvps-prod
    HostName 210.xxx.xxx.xxx
    User ubuntu
    IdentityFile ~/.ssh/id_xvps_prod
    IdentitiesOnly yes
  • Host xvps-prod はショートカット名(好きに付けてOK)
  • IdentitiesOnly yesこの接続でこの鍵だけ使う(実務で重要)

6. ショートカット名でログインしてみる

Bash
ssh xvps-prod

これで通ればOK。

以後、あなたは ssh xvps-prod だけで接続できます。

7. サーバー側でパスワードログインを無効化

サーバーで次を実行します。

Bash
sudo nano /etc/ssh/sshd_config

以下の記載がなけば追記しましょう。

Bash
PasswordAuthentication no
PermitRootLogin no

PermitRootLogin no
root での直接ログインを禁止し、通常ユーザー + sudo に統一します。

最後に変更内容を反映しましょう。

Bash
sudo systemctl restart ssh

ここで鍵ログインが壊れていると詰むので、必ず別ターミナルで接続テストしてから切り替えるのが安全です。

8. 鍵が増えた時の増やし方

GitHub用、検証用、などを増やす時は同じ流れで実施します。

例えば GitHub 用の鍵を作る場合には次のコマンドです。

Bash
ssh-keygen -t ed25519 -f ~/.ssh/id_github

~/.ssh/config に次を追加しましょう。

Bash
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_github
    IdentitiesOnly yes

GitHub に接続できたかの疎通確認をします。

Bash
ssh -T git@github.com

成功すると、次のようなメッセージが表示されます。

Bash
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

Q&A

どの鍵を使ったかを確認したい場合

どの鍵かを表示するには、次のコマンドを実行します。

Bash
ssh -v xvps-prod

# 出力例: Offering public key: /Users/you/.ssh/id_xvps_prod
#        Authentication succeeded (publickey).

これで、目的の鍵が使われているのを確認できます。

SSH鍵のパスフレーズについて

鍵作成時に、パスフレーズを入れるか聞かれます。

Bash
Enter passphrase (empty for no passphrase):

考え方としては、次のとおり。

環境推奨
個人PC設定する
CI / 自動化設定しない
本番サーバー鍵状況次第

後からパスフレーズなしに変更もできるので、基本的には設定するのが望ましいです。

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

こんにちは。CFXLOG の中の人です。
プログラマ/エンジニアとして働きつつ、趣味や勉強で得たことをこのブログにまとめています。
保有資格には「基本情報技術者試験」「宅地建物取引士」などがあります。
メイン言語は Pythonです。たまにVBAを触ることも。Webアプリからインフラ構築、テスト、データ処理まで、幅広く記載していきます。
「実務で使える」「勉強になる」「ちょっとした気づきになる」──そんな情報を発信していきます。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)