ssh-keygenコマンドでSSH公開鍵認証を設定する方法|鍵の生成からauthorized_keys設定まで


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > ssh-keygenコマンドでSSH公開鍵認証を設定する方法|鍵の生成からauthorized_keys設定まで
「パスワードなしでSSHログインしたい」「毎回パスワードを入力するのが面倒」と感じているなら、SSH公開鍵認証を設定する方法を知っておく必要があります。
公開鍵認証はセキュリティ面でもパスワード認証より格段に強固で、現場のLinuxサーバーではほぼ標準の設定です。

この記事では、ssh-keygen コマンドで鍵ペアを生成する基本手順から、サーバーへの公開鍵登録(authorized_keys)、パスフレーズの扱い、よくあるエラーの対処まで、実務で使えるレベルで解説します。
動作確認環境:RHEL 9.4 / Ubuntu 24.04 LTS / Rocky Linux 9.3

この記事のポイント

・ssh-keygen -t ed25519 で最新推奨アルゴリズムの鍵ペアを生成できる
・公開鍵は ssh-copy-id またはauthorized_keysに手動追記で登録する
・パーミッション設定(700/600)が間違うとPermission deniedになる
・パスフレーズ+ssh-agentで安全性と利便性を両立できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

SSH公開鍵認証の仕組みを理解する

公開鍵認証は「秘密鍵を持っている本人かどうか」を数学的に検証するしくみです。
パスワード認証と違い、パスワード文字列がネットワーク上を流れないため、盗聴やブルートフォース攻撃のリスクを大幅に下げられます。

鍵は必ずペアで生成されます。

秘密鍵(private key):自分のPCに保管。絶対に外部に出さない
公開鍵(public key):接続先サーバーに登録する。漏れても問題ない

接続時の流れはおおまかに以下の通りです。

1. クライアントが「公開鍵でこの乱数を暗号化してください」とサーバーに要求する
2. サーバーは登録済みの公開鍵で乱数を暗号化してクライアントに送り返す
3. クライアントは秘密鍵で復号して元の乱数と一致することを確認する
4. 一致すれば認証成功

秘密鍵を持っている本人しかこの検証をパスできないため、パスワードなしでも安全に接続できます。

ssh-keygenの基本的な使い方

1. 鍵ペアを生成する

ssh-keygen コマンドで鍵ペアを生成します。
アルゴリズムには ed25519 を指定するのが現在の推奨です(RSA-4096も可ですが、ed25519はより短い鍵長で同等以上の安全性を持ちます)。

# ed25519アルゴリズムで鍵ペアを生成する(推奨) $ ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): ← Enterで規定値 Enter passphrase (empty for no passphrase): ← パスフレーズを入力 Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub The key fingerprint is: SHA256:xXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX your_email@example.com

-C オプションはコメントです。メールアドレスや用途を書いておくと複数鍵を管理するときに識別しやすくなります。
パスフレーズを設定すると秘密鍵が盗まれても即時悪用されるリスクを下げられます(パスフレーズなしにする場合はそのままEnterを2回押します)。

2. 生成された鍵ファイルを確認する

# ~/.ssh/ ディレクトリを確認する $ ls -la ~/.ssh/ total 16 drwx------. 2 user user 4096 Apr 13 09:30 . drwx------. 7 user user 4096 Apr 13 09:30 .. -rw-------. 1 user user 411 Apr 13 09:30 id_ed25519 ← 秘密鍵(パーミッション600必須) -rw-r--r--. 1 user user 97 Apr 13 09:30 id_ed25519.pub ← 公開鍵(.pub付き)

秘密鍵のパーミッションが 600(所有者のみ読み書き可)になっていることを確認してください。
他のユーザーが読み書きできる状態だとSSHクライアントが「Permissions too open」エラーを出して接続を拒否します。

3. RSA鍵を生成する場合(互換性が必要な場合)

古いサーバーへの接続など、ed25519が使えない環境では -t rsa -b 4096 でRSA 4096bit鍵を生成します。

# RSA 4096bit鍵を生成する(旧環境との互換性が必要な場合) $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

公開鍵をサーバーに登録する

1. ssh-copy-idで自動登録する(推奨)

ssh-copy-id コマンドを使うと、公開鍵のコピーとサーバー側のパーミッション設定を自動で行えます。

# ssh-copy-idで公開鍵をサーバーに登録する $ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_ed25519.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s) /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new key(s) user@192.168.1.100's password: ← この1回だけパスワードが必要 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user@192.168.1.100'"

完了後は ssh user@192.168.1.100 だけでパスワードなしで接続できます(パスフレーズを設定した場合はパスフレーズの入力が必要です)。

2. 手動でauthorized_keysに追記する

ssh-copy-id が使えない環境では、公開鍵の内容をサーバーの ~/.ssh/authorized_keys に手動で追記します。

# クライアント側で公開鍵の内容を確認する $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxx... your_email@example.com # サーバー側で ~/.ssh/authorized_keys に追記する $ mkdir -p ~/.ssh $ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxx... your_email@example.com" >> ~/.ssh/authorized_keys # パーミッションを設定する(重要) $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys

パーミッションの設定は必ず行ってください。これをしないと認証が通りません。

注意:authorized_keys には既存の公開鍵が入っている場合があります。>(上書き)ではなく >>(追記)を使わないと、既存の鍵が消えてロックアウトされる危険があります。

3. 接続確認する

# 公開鍵認証で接続できることを確認する $ ssh user@192.168.1.100 Enter passphrase for key '/home/user/.ssh/id_ed25519': ← パスフレーズを設定した場合のみ表示 Last login: Sun Apr 13 09:30:00 2026 from 192.168.1.1 [user@server ~]$

ssh-agentでパスフレーズ入力を省略する

パスフレーズを設定すると接続のたびにパスフレーズ入力が必要になります。
ssh-agent を使うと、1回入力するだけでセッション中はパスフレーズを記憶させられます。

# ssh-agentを起動して秘密鍵を登録する $ eval "$(ssh-agent -s)" Agent pid 12345 $ ssh-add ~/.ssh/id_ed25519 Enter passphrase for /home/user/.ssh/id_ed25519: ← この1回だけ入力する Identity added: /home/user/.ssh/id_ed25519 (your_email@example.com) # 登録済みの鍵を確認する $ ssh-add -l 256 SHA256:xXxXxXxXxXxXxXxX your_email@example.com (ED25519)

これ以降はパスフレーズなしで繰り返しSSH接続できます。
デスクトップ環境(GNOME等)では自動的にssh-agentが動いているため ssh-add だけで済む場合もあります。

複数の鍵を用途別に管理する(~/.ssh/config)

サーバーごとに異なる鍵ファイルを使いたい場合は ~/.ssh/config にホスト定義を書きます。

# ~/.ssh/config の設定例 Host web-server HostName 203.0.113.10 User ec2-user IdentityFile ~/.ssh/id_ed25519_webserver Host db-server HostName 203.0.113.20 User dbadmin IdentityFile ~/.ssh/id_rsa_legacy Port 22022

設定後は ssh web-server だけで接続できます。
鍵ファイルのパスや接続先ホスト名を毎回打ち込む必要がなくなり、作業ミスも減ります。

「Permission denied (publickey)」が出た時の対処法

公開鍵認証を設定したのに Permission denied (publickey) が出るケースで最も多い原因はパーミッションの誤設定です。

1. クライアント側のパーミッションを確認する

# 秘密鍵のパーミッションを確認する(600でなければ修正) $ ls -la ~/.ssh/id_ed25519 -rw-------. 1 user user 411 Apr 13 09:30 /home/user/.ssh/id_ed25519 # 権限が緩い場合は修正する $ chmod 600 ~/.ssh/id_ed25519 $ chmod 700 ~/.ssh

2. サーバー側のパーミッションを確認する

# サーバー側で確認する(SSHでログインできる場合) $ ls -la ~/.ssh/ drwx------. 2 user user 4096 Apr 13 09:30 . -rw-------. 1 user user 411 Apr 13 09:30 authorized_keys ← 600必須 $ ls -la ~ | grep .ssh drwx------. 2 user user 4096 Apr 13 09:30 .ssh ← 700必須

3. sshd_configで公開鍵認証が有効か確認する

# /etc/ssh/sshd_config の設定を確認する $ sudo grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_config PubkeyAuthentication yes ← yesになっていること AuthorizedKeysFile .ssh/authorized_keys ← 標準パス

4. 詳細ログで原因を特定する

-v オプションを付けると接続の詳細ログが出ます。-vvv でさらに詳しく確認できます。

# -vで詳細ログを出力して原因を特定する $ ssh -v user@192.168.1.100 ... debug1: Trying private key: /home/user/.ssh/id_ed25519 debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic debug1: No more authentication methods to try. user@192.168.1.100: Permission denied (publickey).

Trying private key」の行で鍵ファイルのパスを確認し、「Authentications that can continue」で許可されている認証方式を確認します。

本記事のまとめ

やりたいこと コマンド
ed25519鍵ペアを生成する ssh-keygen -t ed25519 -C "コメント"
RSA鍵ペアを生成する(旧環境向け) ssh-keygen -t rsa -b 4096 -C "コメント"
公開鍵をサーバーに自動登録する ssh-copy-id -i ~/.ssh/id_ed25519.pub user@ホスト名
authorized_keysに手動追記する echo "公開鍵の内容" >> ~/.ssh/authorized_keys
ssh-agentに秘密鍵を登録する ssh-add ~/.ssh/id_ed25519
登録済みの鍵を確認する ssh-add -l
接続詳細ログを表示する ssh -v user@ホスト名
SSH公開鍵認証は一度設定してしまえば日常の作業がスムーズになるだけでなく、パスワード総当たり攻撃のリスクも排除できます。
特にサーバーを複数管理するエンジニアにとっては欠かせない設定です。

SSH接続の基本的なコマンドや接続オプションについては、sshコマンドでLinuxサーバーにリモート接続する方法も合わせて参照してください。
また、SSHのセキュリティ強化としてポート番号変更やパスワード認証の無効化については、SSHのポート番号を変更する方法|sshd_configの設定からfirewalld・SELinux対応まででも解説しています。

SSH設定が整ったら、次はサーバー構築の基礎を体系的に学びませんか?

公開鍵認証をマスターするとサーバー管理が格段にラクになります。その力を活かして、体系的にLinuxサーバー構築を学んでみませんか。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。