- 「よくわからないけど、とりあえず作った」
- 「デフォルトのまま使っている」
- 「名前を付けた方がいいの?付けない方がいいの?」
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.GitHubのSSHキー設定ガイド
ここからはSSH設定のうち、GitHubに関するものをまとめます。
1. SSHキーの生成
ローカルマシンのターミナルで、以下のコマンドを実行します。
ssh-keygen -t ed25519 -C "あなたのメールアドレス"すると、キーの保存場所を聞かれます。
ssh-keygen -t ed25519 -C "yourmailaddress@sample.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): 鍵のファイル名を指定しない場合には、何も入力しないでEnterキーを押します。
そうすると.sshディレクトリ配下に公開鍵と秘密鍵の二つの鍵が生成されます。
もしgithubという名前のキーペアを作りたいなら、次のように入力してEnterキーを押しましょう。
ssh-keygen -t ed25519 -C "yourmailaddress@sample.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): /Users/username/.ssh/github続いてパスフレーズの入力を求められます。
ssh-keygen -t ed25519 -C "yourmailaddress@sample.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase): パスフレーズはセキュリティを高めるためのパスワードです。
不要であれば何も入力せずに、空のままEnterを押してしまいましょう。
最後にlsコマンドを実行して、キーが作成されたかを確認します。
% ls -la ~/.ssh
-rw------- 1 **** staff 411 9 21 21:12 id_ed25519
-rw-r--r-- 1 **** staff 102 9 21 21:12 id_ed25519.pubid_ed25519は秘密鍵です。
この鍵は自分だけが持つ鍵なので、他の人に渡してはいけません。
一方のid_ed25519.pubは公開鍵になります。
公開鍵は外部にばら撒くための鍵になるので、この後のステップでGitHubアカウントに登録します。
karo拡張子は、public(公開)と覚えておくと間違えないです。
2. 公開鍵をGitHubに追加する
先ほど生成した公開鍵の内容を、クリップボードにコピーします。
pbcopy < ~/.ssh/id_ed25519.pubコピーした内容をGitHubに登録しましょう。
さっそくGitHubのウェブサイトにログインして、Settingsをクリックします。


続いてSSH and GPG keysを選択。
緑色のNew SSH keyボタンをクリックします。


以下のSSHキーを登録するフォームが表示されます。


Titleには今回登録する鍵に名前をつけます。
他の鍵と区別がつけば良いので、分かればなんでもOKです。
Keyのところに先ほどクリップボードにコピーした公開鍵を貼り付けましょう。
最後にAdd SSH keyボタンを押せば、GitHub側での操作は完了です。
3. ローカルマシンでconfigファイルに鍵を登録
ここからはローカルマシン側の手続きです。
以下のコマンドを実行して、configファイルを編集しにいきます。
vi ~/.ssh/configファイルの中身は以下のように書き込みましょう。
Host github
HostName github.com
User ****** # ご自身のGitHubアカウントのユーザー名に置き換える
IdentityFile ~/.ssh/id_ed25519 # 秘密鍵のパスを入力
IdentitiesOnly yes
Port 22
ServerAliveInterval 60項目について、少し補足します。
- Host
接続に対して便宜的に名前をつけます。 - HostName
接続先サーバーのホスト名を指定します。 - User
GitHubアカウントのユーザー名を指定します。 - IdentityFile
秘密鍵のパスを指定します。 - IdentitiesOnly
今回の秘密鍵のみを認証に使います。 - Port
SSH接続に使うポートを指定します。 - ServerAliveInterval
接続が切れにくくなる設定です。
入力が終わったら上書き保存します。ESCキーを押してから次のコマンドを押して、Enterキーを押しましょう。
:wq最後に以下のコマンドを実行して、GitHubに正常に接続できるかテストをします。
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 / 自動化 | 設定しない |
| 本番サーバー鍵 | 状況次第 |
後からパスフレーズなしに変更もできるので、基本的には設定するのが望ましいです。
SSHキーのパスフレーズを変更したい
次のコマンドでパスフレーズの変更ができます。
ssh-keygen -p -f ~/.ssh/targetkeyコマンドを実行すると現在のキーを聞かれます。
.ssh % ssh-keygen -p -f ~/.ssh/github
Enter old passphrase: 古いパスフレーズを入力してEnterを押すと、新しいパスフレーズが求められます。
.ssh % ssh-keygen -p -f ~/.ssh/github
Enter old passphrase:
Key has comment '*******@gmail.com'
Enter new passphrase (empty for no passphrase): もう一度パスフレーズを入力するよう言われるので、同じものを入力しましょう。
.ssh % ssh-keygen -p -f ~/.ssh/github
Enter old passphrase:
Key has comment '*******@gmail.com'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.パスフレーズの変更に成功すると、上のようなメッセージが表示されます。
複数のSSHキーを管理したい
SSHキーの生成するときには、わかりやすいファイル名をつけます。
例えば以下のようにサービス名ごとに命名していくと、後でごちゃごちゃにならず便利です。
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/github_key
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/work_server_keyまた、SSH設定ファイル(~/.ssh/config)については、ホストごとに異なるSSHキーを設定するよう指定すると良いです。
Host github
HostName github.com
User git
IdentityFile ~/.ssh/github_key
Host workserver
HostName work.example.com
User your_username
IdentityFile ~/.ssh/work_server_key









コメント