SSH鍵認証とは何か?パスワード認証との違いと仕組みを解説

SSH鍵認証とは何か

SSH鍵認証の仕組みとパスワード認証との違いを理解しよう

SSHでLinuxサーバへ接続する際、多くの学習環境ではパスワード認証を利用します。しかし実際の企業環境やクラウド環境では、パスワード認証ではなくSSH鍵認証(公開鍵認証)が利用されることが一般的です。

AWSのEC2やAzureのLinux VMを利用したことがある方は、秘密鍵ファイルを指定して接続した経験があるかもしれません。

SSH鍵認証は、パスワードを送信することなく利用者を認証できるため、高いセキュリティを実現できます。

本記事ではSSH鍵認証の仕組みやパスワード認証との違い、実務で利用される理由について詳しく解説します。

SSH鍵認証とは

SSH鍵認証とは、公開鍵暗号方式を利用してSSHログインを行う認証方式です。

利用者は鍵ペアを作成します。

  • 公開鍵(Public Key)
  • 秘密鍵(Private Key)

公開鍵はサーバへ登録し、秘密鍵は利用者自身が保管します。

ログイン時には秘密鍵を利用して認証を行うため、パスワードを送信する必要がありません。

なぜ鍵認証が利用されるのか

パスワード認証にはいくつかの問題があります。

  • 総当たり攻撃に弱い
  • 辞書攻撃の対象になる
  • パスワード漏洩リスクがある
  • 使い回しの危険性がある

一方で鍵認証では秘密鍵を持っていなければ認証できません。

そのため攻撃者がユーザー名を知っていても簡単にはログインできません。

このことから企業環境では公開鍵認証が標準的に利用されています。

パスワード認証との違い

項目公開鍵認証パスワード認証
認証情報秘密鍵パスワード
盗難リスク低い比較的高い
総当たり攻撃強い弱い
自動運用容易難しい
実務利用非常に多い限定的

現在のサーバ運用では公開鍵認証が推奨されています。

公開鍵と秘密鍵とは

SSH鍵認証では2つの鍵を利用します。

公開鍵はサーバへ登録します。

秘密鍵はクライアント側で厳重に管理します。

例えば以下のようなファイルです。

id_ed25519
id_ed25519.pub

秘密鍵です。

id_ed25519

公開鍵です。

id_ed25519.pub

公開鍵は他人に見られても問題ありませんが、秘密鍵は絶対に他人へ渡してはいけません。

SSH鍵認証の流れ

実際の認証は以下の流れで行われます。

  1. クライアントがサーバへ接続
  2. サーバが公開鍵登録状況を確認
  3. サーバが認証データを送信
  4. クライアントが秘密鍵で署名
  5. サーバが公開鍵で検証
  6. 認証成功

この過程で秘密鍵自体がネットワーク上へ送信されることはありません。

これが高い安全性を実現している理由です。

鍵ペアを作成する

Linuxではssh-keygenコマンドを利用します。

$ ssh-keygen -t ed25519

作成後は以下のようなファイルが生成されます。

~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

現在はED25519が推奨されています。

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

公開鍵をサーバへコピーします。

最も簡単な方法はssh-copy-idです。

$ ssh-copy-id user@server

公開鍵は以下へ保存されます。

~/.ssh/authorized_keys

サーバ側ではこのファイルを参照して認証を行います。

手動で登録する方法

ssh-copy-idが利用できない場合は手動登録も可能です。

公開鍵内容を確認します。

cat ~/.ssh/id_ed25519.pub

表示された内容をサーバ側のauthorized_keysへ追記します。

vi ~/.ssh/authorized_keys

登録後は権限も確認します。

重要なパーミッション設定

SSHは権限に厳しいサービスです。

一般的な設定例です。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

権限が緩すぎると認証に失敗します。

実務でも非常によく発生するトラブルです。

鍵認証で接続する

秘密鍵を利用して接続します。

$ ssh -i ~/.ssh/id_ed25519 user@server

正しく設定されていればパスワード入力なしでログインできます。

秘密鍵のパスフレーズだけ求められる場合があります。

秘密鍵にパスフレーズを設定する

秘密鍵が盗まれた場合に備えてパスフレーズを設定できます。

鍵作成時に以下が表示されます。

Enter passphrase:

ここで設定すると秘密鍵利用時に追加認証が行われます。

セキュリティ向上に有効です。

鍵認証が失敗する主な原因

実務でよく発生するトラブルです。

  • 公開鍵未登録
  • authorized_keys権限異常
  • .ssh権限異常
  • 秘密鍵指定ミス
  • ユーザー名違い
  • SELinux設定

問題発生時は-vオプションで確認できます。

ssh -v user@server

実務での利用例

公開鍵認証は以下のような場面で利用されています。

  • AWS EC2管理
  • Azure Linux VM管理
  • Dockerホスト管理
  • Kubernetesノード管理
  • Ansible自動化
  • バックアップサーバ接続
  • CI/CD環境

特に自動化ツールでは公開鍵認証が必須といってもよいでしょう。

公開鍵認証へ移行した後の設定

公開鍵認証が正常に動作したら、パスワード認証を無効化することが一般的です。

sshd_configを編集します。

PasswordAuthentication no
PubkeyAuthentication yes

これによりセキュリティをさらに向上できます。

まとめ

SSH鍵認証は公開鍵暗号方式を利用した安全な認証方式です。

パスワード認証よりも高いセキュリティを実現できるため、現在の企業環境やクラウド環境では標準的に利用されています。

実務では公開鍵の登録方法やauthorized_keysの管理、権限設定について理解しておくことが重要です。

Linuxサーバ管理者を目指すのであれば、SSH鍵認証は必須の知識として身につけておきましょう。