Ubuntu 22.04 で SSH 公開鍵認証を使い、Ed25519 鍵でログインするための基本手順です。公開鍵認証はパスワード認証より扱いやすい場面が多い一方、鍵ファイルと authorized_keys の権限が崩れるとログインできなくなります。
この記事では、鍵の作成、サーバーへの公開鍵登録、権限確認、疎通確認、パスワード認証を止める前の確認点を順に扱います。既存接続を切る前に、必ず別セッションで公開鍵ログインできることを確認します。
- Ed25519 鍵の作成
authorized_keysの配置と権限- 公開鍵ログインの疎通確認
- パスワードログインを止める前の確認点
書籍
ストーリーで覚える Linux CLI 入門
SSH や Linux の基本操作を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
公開鍵認証の位置づけ
| 項目 | 考え方 |
| 秘密鍵 | クライアント側に置き、外部へ渡さない |
| 公開鍵 | サーバー側の authorized_keys に登録する |
| Ed25519 | 短く扱いやすい SSH 鍵方式 |
| パスワード認証停止 | 公開鍵ログイン確認後に行う |
クライアント側で鍵を作成する
クライアント端末で Ed25519 鍵を作成します。既存の鍵を上書きしないよう、保存先を確認してから実行します。
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_ubuntu2204
ls -l ~/.ssh/id_ed25519_ubuntu2204 ~/.ssh/id_ed25519_ubuntu2204.pub公開鍵を確認する
サーバーへ登録するのは .pub 側の公開鍵です。秘密鍵を貼り付けないようにします。
cat ~/.ssh/id_ed25519_ubuntu2204.pubssh-copy-id で登録する
ssh-copy-id が使える場合は、公開鍵を対象ユーザーの authorized_keys に登録できます。
ssh-copy-id -i ~/.ssh/id_ed25519_ubuntu2204.pub myadmin@server.example.com手動で登録する場合
ssh-copy-id を使わない場合は、サーバー側で .ssh ディレクトリと authorized_keys を作成し、権限を確認します。
install -d -m 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys公開鍵を authorized_keys に追記します。
tee -a ~/.ssh/authorized_keys >/dev/null <<'EOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFexampleKeyBodyOnlyReplaceThis user@example
EOF
chmod 600 ~/.ssh/authorized_keys公開鍵でログインする
秘密鍵を指定してログインできるか確認します。
ssh -i ~/.ssh/id_ed25519_ubuntu2204 myadmin@server.example.comクライアント設定を書く
接続先を毎回入力しない場合は、クライアント側の ~/.ssh/config に接続設定を追加します。
tee -a ~/.ssh/config >/dev/null <<'EOF'
Host ubuntu2204-server
HostName server.example.com
User myadmin
IdentityFile ~/.ssh/id_ed25519_ubuntu2204
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/configssh ubuntu2204-serverサーバー側の設定を確認する
公開鍵認証が有効になっているか確認します。パスワード認証を止める前に、公開鍵ログインが成功していることを確認します。
sudo sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication'パスワード認証を止める場合
公開鍵ログインが確認できたら、サーバー側でパスワード認証を無効化します。作業中の SSH 接続は閉じず、別セッションでログイン確認してから進めます。
sudo tee /etc/ssh/sshd_config.d/20-public-key-auth.conf >/dev/null <<'EOF'
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sudo sshd -t
sudo systemctl reload sshログを確認する
ログインできない場合は、サーバー側の SSH ログとファイル権限を確認します。
sudo journalctl -u ssh --since '30 minutes ago'
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys権限の目安
| 対象 | 権限 |
~/.ssh | 700 |
authorized_keys | 600 |
| 秘密鍵 | 600 |
| 公開鍵 | 公開してよいが、改ざんされない場所で管理する |
運用上の注意
- 秘密鍵はクライアント側だけで管理する
- パスワード認証を止める前に公開鍵ログインを別セッションで確認する
- 鍵を差し替える場合は、古い鍵を消す前に新しい鍵でログインできることを確認する
authorized_keysに不要な鍵を残さない- ログインできない場合は SSH 設定、ホームディレクトリ、
.ssh、authorized_keysの権限を順に確認する
まとめ
Ubuntu 22.04 で SSH 公開鍵認証を使う場合は、クライアント側で Ed25519 鍵を作成し、公開鍵だけをサーバー側の authorized_keys に登録します。秘密鍵は外部へ渡しません。
パスワード認証を止める場合は、公開鍵ログインが成功することを確認してから設定を変更します。設定変更後は sshd -t で構文を確認し、接続中のセッションを残したまま別セッションでログイン確認します。

