おはこんばんにちは!
自宅 LAN 上の Raspberry Pi に、Mac のターミナルから SSH する機会が増えてきました。
毎回 ssh pi@192.168.11.10 と IP を打ち、パスワードを入力するのは地味に面倒になってきました。
そこで、公開鍵認証(鍵認証) を入れておくと、
- 接続コマンドが
ssh raspi.localの一行になる - 2 回目以降はパスフレーズも Keychain 経由で省略できる(macOS)
- パスワードログインよりブルートフォースに強い
という状態になり、Raspberry Pi への接続が楽になります。
やること自体は定番手順ですが、Mac 側の ~/.ssh/config と Pi 側の権限設定 をセットで整理しておくと、あとから Tailscale 越しに接続するときもそのまま流用できます。
この記事では、おおまかに次の流れで設定します。
- Mac で鍵ペアを作る
- 公開鍵(
.pub)を Pi に送る - Pi 側で
authorized_keysを置く - Mac の
~/.ssh/configにホスト定義を書く - 接続テスト
- 前提
- 1. 鍵ペアの作成(Mac)
- 2. 公開鍵を Pi へ転送(Mac → Pi)
- 3. Raspberry Pi 側の設定
- 4. Mac の “~/.ssh/config” を編集
- 5. 接続テスト
- うまく繋がらないとき
- 余裕があれば — パスワードログインを切る
- このあと
- まとめ
- 参考リンク
前提
| 項目 | この記事での例 |
|---|---|
| 接続元 | macOS |
| 接続先 | Raspberry Pi(LAN 内) |
| Pi の IP | 192.168.11.10 |
| Pi のユーザー | pi(環境に合わせて読み替え) |
| 鍵の保存先 | ~/.ssh/raspi_ed25519 |
| 鍵の種類 | Ed25519 |
IP アドレスとユーザー名は環境ごとに違います。
コマンド中の値は自分の環境に置き換えてください。
1. 鍵ペアの作成(Mac)
~/.ssh に Raspberry Pi 専用の鍵を作ります。
種類は Ed25519 にします。
RSA 4096 より鍵が短く、生成・認証も速く、現行の OpenSSH ではこちらが定番。
cd ~/.ssh/ ssh-keygen -t ed25519 -C "pi@192.168.11.10" -f ~/.ssh/raspi_ed25519
| オプション | 意味 |
|---|---|
-t ed25519 |
Ed25519(楕円曲線。SSH 向けの現行標準) |
-C "..." |
コメント(鍵のラベル。後から ssh-add -l で見分ける用) |
-f ~/.ssh/raspi_ed25519 |
秘密鍵 / 公開鍵のファイル名 |
パスフレーズを聞かれたら、空でも動きますが、設定しておくほうが安全 です。
macOS なら後述の UseKeychain yes で Keychain に載せられます。
生成されるファイル:
~/.ssh/raspi_ed25519 … 秘密鍵(絶対に Pi へ送らない) ~/.ssh/raspi_ed25519.pub … 公開鍵(Pi へ送る)
2. 公開鍵を Pi へ転送(Mac → Pi)
まだ鍵認証が効いていない段階なので、パスワードログインで転送 します。
scp ~/.ssh/raspi_ed25519.pub pi@192.168.11.10:~/authorized_keys
ホーム直下に authorized_keys という名前で置いておき、次のステップで .ssh へ移します。
(最初から ~/.ssh/ へ送っても構いませんが、Pi 側に .ssh が無い場合は mkdir が必要です。)
代替: ssh-copy-id
これからやる、同じことをまとめてやるコマンドもあります。
ssh-copy-id -i ~/.ssh/raspi_ed25519.pub pi@192.168.11.10
手動で権限を触りたい場合は、scp + 次セクションの手順のほうが分かりやすいです。
3. Raspberry Pi 側の設定
Pi に SSH ログインした状態で、公開鍵を正しい場所に置き、権限を揃えます。
SSH は権限が 1 段ずれているだけで鍵認証を拒否するので、ここがハマりどころです。
mkdir -p ~/.ssh chmod 700 ~/.ssh mv ~/authorized_keys ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
| パス | 推奨権限 | 理由 |
|---|---|---|
~/.ssh/ |
700 |
所有者以外読めない |
~/.ssh/authorized_keys |
600 |
公開鍵一覧を他人に読ませない |
authorized_keys の中身は、Mac の raspi_ed25519.pub を 1 行そのまま貼った状態になっていれば OK です。
4. Mac の “~/.ssh/config” を編集
毎回 IP と -i を指定しなくて済むよう、ホストのエイリアスを定義します。
vim ~/.ssh/config
Host raspi.local HostName 192.168.11.10 User pi IdentityFile ~/.ssh/raspi_ed25519 PreferredAuthentications publickey UseKeychain yes AddKeysToAgent yes
| 設定 | 意味 |
|---|---|
Host raspi.local |
ssh raspi.local のときに使う設定ブロック(名前は任意) |
HostName |
実際の接続先 IP / ホスト名 |
User |
ログインユーザー |
IdentityFile |
使う秘密鍵 |
PreferredAuthentications publickey |
鍵認証を優先(パスワード入力に落ちにくくする) |
UseKeychain yes |
パスフレーズを macOS Keychain に保存 |
AddKeysToAgent yes |
接続時に ssh-agent へ鍵を載せる |
Host raspi.local は mDNS の raspi.local と名前を揃えているだけで、HostName が IP なら IP で繋がります。
Tailscale 越しに繋ぐときは、別ブロック(例: Host raspi-tailscale)を足すと整理しやすいです。
config ファイル自体も権限を締めておきます。
chmod 600 ~/.ssh/config
5. 接続テスト
Mac から:
ssh raspi.local
初回は鍵のパスフレーズ入力を求められることがあります。
2 回目以降は ssh raspi.local だけで入れる状態になっていれば成功です。
動作確認のチェックリスト:
- パスワードを聞かれずにログインできる
ssh -v raspi.localのログにOffering public key→Authentication succeededが出る- 意図したユーザー(
piなど)のシェルに入る
うまく繋がらないとき
| 症状 | よくある原因 |
|---|---|
Permission denied (publickey) |
Pi 側の authorized_keys 権限、User の typo、別ユーザーに鍵を置いている |
| 毎回パスフレーズを聞かれる | UseKeychain / AddKeysToAgent 未設定、または Keychain 未登録 |
Connection refused |
Pi の SSH 無効、IP 変更、LAN 外から IP 直打ち |
| 古い鍵が使われる | IdentityFile の指定ミス、ssh-agent に別鍵だけ載っている |
Pi 側の SSH ログを見ると原因が分かることが多いです。
sudo journalctl -u ssh -n 50 # または古い OS sudo tail -n 50 /var/log/auth.log
Mac 側では verbose モードが手っ取り早いです。
ssh -v raspi.local
余裕があれば — パスワードログインを切る
鍵認証が安定したら、Pi 側でパスワード SSH を無効にする選択肢があります。
鍵を失うと入れなくなる ので、別経路(物理キーボード + モニタ、または別ユーザー鍵)を確保してからにしてください。
/etc/ssh/sshd_config の例:
PasswordAuthentication no PubkeyAuthentication yes
変更後:
sudo systemctl restart ssh
このあと
鍵認証が通れば、同じ Pi 向けメモ(OpenMediaVault、Tailscale、Nextcloud など)の作業も、毎回パスワードなしで SSH → 設定 のリズムで回せます。
Tailscale を足したあとは HostName を Tailscale のホスト名にした別エントリを config に書く、という拡張だけで済みます。
まとめ
- Mac —
ssh-keygen -t ed25519で専用鍵、~/.ssh/configにHostエイリアス - Pi —
~/.ssh/authorized_keysに公開鍵、ディレクトリ700・ファイル600 - 接続 —
ssh raspi.localの一行。2 回目以降は Keychain + agent で楽になる - ハマりどころ — 権限と
User/IdentityFileの不一致
定番手順ですが、config と権限をセットでメモしておく と、数ヶ月後に Pi を増やしたときも同じ型で再現できます。