SSH接続時に毎回パスワードを入力するのが面倒になってきたので、
公開鍵認証(鍵認証)を使ったログイン方法を整理した。
内容は下記。基本のお話のみです。
- 公開鍵認証の基本
- 最低限つまずかないための注意点
- 複数鍵を安全に運用する方法
公開鍵認証とは?
SSH接続時にパスワードの代わりに秘密鍵と公開鍵のペアを使って認証する方式のこと。
- パスワード入力が不要
- 自動化・スクリプトと相性が良い
A. 基本手順
1. クライアント側で鍵を作成する
ssh-keygen -t ed25519 -C "your_name@your_pc"
作成されるファイルは2つ:
- 秘密鍵:
id_ed25519
→クライアントに保存。絶対に漏洩させない - 公開鍵:
id_ed25519.pub
→接続先サーバーに登録する
補足・注意点:
- 作成場所はデフォルトで
~/.ssh/ -
-Cはコメント(後から鍵を管理するときに超重要) - 途中でパスフレーズを聞かれる
- 未入力(Enterのみ)で問題なし
- 設定した場合、
ssh-agentを使わないと毎回入力が必要になる
- 同名ファイルが存在すると上書きされる(対策は後述)
2. サーバー側に公開鍵を登録する
登録先ファイル:
~/.ssh/authorized_keys
公開鍵(.pubの中身のテキスト)をそのまま1行で追記すればOK。
補足・注意点:
パーミッションに注意。
SSHはパーミッションが厳密にチェックされる。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ssh-copy-idを使うとクライアントから直接公開鍵を登録できる。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
これで以降はパスワード不要でSSH接続できる。
B. 複数鍵の運用
クライアント側の秘密鍵が一つだけでは足りない場合があります。
例:
- 自宅サーバー用
- 会社サーバー用
- 個人VPS用
こういった複数の秘密鍵がある場合に手軽に使い分ける方法を説明します。
1. 鍵を作成する時は別名にする
ssh-keygen -t ed25519 -C "your_name@your_pc" -f ~/.ssh/id_ed25519_serverA
※-fを指定することで既存鍵の上書きを防げる
※公開鍵の登録手順は同じ(省略)
2. ~/.ssh/configに接続設定を書く
~/.ssh/configに次のような内容を記述する。
下記の値(nameやアドレスなど)はサンプル例。
Host serverA
HostName 203.0.113.45
User ubuntu_user
IdentityFile ~/.ssh/id_ed25519_serverA
IdentitiesOnly yes
これで接続は以下だけで済む。(冒頭のHost部分)
ssh serverA
IPアドレス、ユーザー名、使用する秘密鍵
を毎回指定する必要がなくなる。
まとめ
- 公開鍵認証は一度設定すれば超楽
- 鍵は用途ごとに分けるが吉
- 複数鍵でも
~/.ssh/configを設定すれば手軽に使い分けられる