手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 SSH 公開鍵認証の設定 – Ed25519 鍵でログインする

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.pub

ssh-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/config
ssh 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

権限の目安

対象権限
~/.ssh700
authorized_keys600
秘密鍵600
公開鍵公開してよいが、改ざんされない場所で管理する

運用上の注意

  • 秘密鍵はクライアント側だけで管理する
  • パスワード認証を止める前に公開鍵ログインを別セッションで確認する
  • 鍵を差し替える場合は、古い鍵を消す前に新しい鍵でログインできることを確認する
  • authorized_keys に不要な鍵を残さない
  • ログインできない場合は SSH 設定、ホームディレクトリ、.sshauthorized_keys の権限を順に確認する

まとめ

Ubuntu 22.04 で SSH 公開鍵認証を使う場合は、クライアント側で Ed25519 鍵を作成し、公開鍵だけをサーバー側の authorized_keys に登録します。秘密鍵は外部へ渡しません。

パスワード認証を止める場合は、公開鍵ログインが成功することを確認してから設定を変更します。設定変更後は sshd -t で構文を確認し、接続中のセッションを残したまま別セッションでログイン確認します。

関連する記事
Ubuntu 22.04 SSH 公開鍵認証の設定 – Ed25519 鍵でログインする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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

トップへ戻る