Linux入門

SSHキー認証の仕組みと設定方法

Linux入門
記事内に広告が含まれています。

「VPSを借りたけど、どうやって接続するの?」「パスワード認証は危険って聞いたけど、公開鍵認証ってどうやるの?」

この記事では、LinuxサーバーへのSSH接続の基本と、セキュリティの高い公開鍵認証の設定方法を完全解説します。インフラエンジニアの日常業務で毎日使う知識です。

SSHとは?

SSH(Secure Shell)は、ネットワーク越しに別のコンピューター(サーバー)へ安全に接続するためのプロトコル(通信規格)です。通信内容が暗号化されるため、パスワードやコマンドが盗聴されません。

以前使われていた telnet は通信が暗号化されていないため現在はほぼ使われず、SSHが標準となっています。デフォルトのポートは 22番 です。

基本的な接続方法

# 基本構文
$ ssh [ユーザー名]@[ホスト名またはIPアドレス]

# 例:IPアドレスで接続
$ ssh user@192.168.1.100

# 例:ホスト名で接続
$ ssh user@example.com

# 別ポートを指定(デフォルトは22番)
$ ssh -p 2222 user@example.com

# 初めて接続するとフィンガープリントの確認が出る
The authenticity of host 'example.com' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

初回接続時に表示されるフィンガープリントの確認は、接続先が本物のサーバーかを確認するセキュリティ機能です。「yes」と入力すると ~/.ssh/known_hosts にホスト情報が保存され、次回以降は表示されません。

パスワード認証 vs 公開鍵認証

項目パスワード認証公開鍵認証
セキュリティ△(ブルートフォース攻撃に脆弱)◎(秘密鍵がネットワークに流れない)
利便性○(設定不要)○(設定後はパスワード不要)
推奨度開発・学習環境のみ本番サーバーでは必須

公開鍵認証の仕組み

公開鍵認証では「公開鍵」と「秘密鍵」のペアを使います。南京錠(公開鍵)と鍵(秘密鍵)のイメージです。公開鍵はサーバーに事前登録し、秘密鍵は手元だけに保管します。

SSH公開鍵認証の仕組み 接続フロー図
▲ 秘密鍵はクライアントから外に出ない。サーバーは公開鍵との対応を検証するだけなので盗聴されても安全

公開鍵認証の設定手順

ステップ1:鍵ペアを生成する

クライアント(手元のPC)で鍵ペアを生成します。現在は ed25519 アルゴリズムが推奨されています(RSAより高速・安全)。

# ed25519鍵を生成(推奨)
$ ssh-keygen -t ed25519 -C "your_email@example.com"

# RSA 4096bit鍵を生成(レガシーシステム対応が必要な場合)
$ ssh-keygen -t rsa -b 4096 -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:

⚠️ パスフレーズは設定することを強く推奨します。秘密鍵ファイルが盗まれた場合でも、パスフレーズがあれば不正利用を防げます。

ステップ2:公開鍵をサーバーに登録する

ssh-copy-id コマンドを使うと、公開鍵を自動でサーバーの ~/.ssh/authorized_keys に追記できます。

# ssh-copy-idを使う方法(最も簡単)
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@example.com

# 手動で行う場合(ssh-copy-idが使えない環境向け)
$ cat ~/.ssh/id_ed25519.pub | ssh user@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ステップ3:公開鍵認証で接続を確認する

# 公開鍵認証で接続(パスワードなしでログインできるはず)
$ ssh user@example.com

# 特定の秘密鍵を指定して接続
$ ssh -i ~/.ssh/id_ed25519 user@example.com

~/.ssh/ ディレクトリの構成

~/.ssh/ ディレクトリの構成とファイルの役割一覧表
▲ パーミッションの設定が重要。特にid_rsaは600必須(前記事のchmod参照)

~/.ssh/config でSSH接続を便利にする

~/.ssh/config ファイルに接続設定を書いておくと、長いコマンドを毎回打つ手間が省けます。

# ~/.ssh/config の設定例
Host myserver
    HostName 192.168.1.100
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host work-server
    HostName work.example.com
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_work
# 設定後はホスト名だけで接続できる
$ ssh myserver        # ssh ubuntu@192.168.1.100 と同じ
$ ssh work-server     # ssh -p 2222 deploy@work.example.com と同じ

config ファイルのパーミッションは 600 に設定してください。

$ chmod 600 ~/.ssh/config

SSHコマンド早見表

SSHよく使うコマンド早見表
▲ ssh-keygenはed25519が現在の推奨。ssh-copy-idで公開鍵登録が最も簡単

セキュリティ強化:パスワード認証を無効にする

公開鍵認証の設定が完了したら、サーバー側でパスワード認証を無効にするとセキュリティが大幅に向上します。/etc/ssh/sshd_config を編集します。

# /etc/ssh/sshd_config の設定
PasswordAuthentication no      # パスワード認証を無効化
PubkeyAuthentication yes       # 公開鍵認証を有効化
PermitRootLogin no             # rootでの直接ログインを禁止
Port 22                        # ポート番号(変更も検討)

# 設定変更後はSSHサービスを再起動
$ sudo systemctl restart sshd

⚠️ 注意:パスワード認証を無効にする前に、必ず公開鍵認証でのログインが成功することを別のターミナルで確認してください。設定ミスで締め出されるリスクがあります。

まとめ:この記事で学んだこと

  • SSHはネットワーク越しに暗号化された安全な接続を提供するプロトコル(デフォルト22番ポート)
  • 公開鍵認証はパスワード認証より安全。本番サーバーでは必須
  • 鍵の生成:ssh-keygen -t ed25519(ed25519を推奨)
  • 公開鍵の登録:ssh-copy-id user@host が最も簡単
  • ~/.ssh/config を活用すると接続が便利になる
  • 秘密鍵(id_ed25519)のパーミッションは 600 必須
  • 公開鍵認証の確認後、パスワード認証を無効にするとセキュリティが向上

関連記事

関連記事:aptパッケージ管理完全ガイド【Ubuntu/Debian系】

ネットワークコマンド入門【ping/curl/wget/ss/ip】

Linuxユーザー・グループ管理【useradd/usermod完全解説】

📋 Linux入門チートシート完全版で全コマンドを一気に復習できます。

コメント

タイトルとURLをコピーしました