公開鍵認証方式を用いたSSH通信の設定方法

SSH(Secure Shell)は、ネットワークを介して安全にリモートサーバーに接続するためのプロトコルです。パスワード認証に比べて、公開鍵認証方式はセキュリティが高く、自動化にも適しています。

1. SSHサーバーの設定変更 [接続先PC]

SSHサーバー(sshd)の設定ファイル /etc/ssh/sshd_config を編集し、公開鍵認証を有効化し、パスワード認証を無効化します。

sudo nano /etc/ssh/sshd_config

以下の行を探し、設定を変更または追加します。

# 公開鍵認証を有効化
PubkeyAuthentication yes

# パスワード認証を無効化 (セキュリティ向上のため強く推奨)
PasswordAuthentication no

# rootユーザーでの直接ログインを禁止 (セキュリティ向上のため強く推奨)
PermitRootLogin no

# SSHポートの変更 (オプション、デフォルトは22)
# Port 2222

変更を保存したら、SSHサービスを再起動して設定を適用します。

sudo systemctl restart sshd

2. 秘密鍵と公開鍵の作成 [接続元PC]

SSH接続を行うクライアントPCで、SSHキーペア(秘密鍵と公開鍵)を生成します。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: RSA方式で鍵を生成します。より新しい ed25519 も推奨されます。
  • -b 4096: RSA鍵のビット長を指定します(より安全)。
  • -C "your_email@example.com": 鍵にコメントを追加します(メールアドレスなど)。

コマンドを実行すると、鍵の保存場所とパスフレーズの入力を求められます。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): # デフォルトでEnter (通常は変更不要)

Enter passphrase (empty for no passphrase): # パスフレーズを入力 (セキュリティのため推奨)
Enter same passphrase again: # パスフレーズを再入力

Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
  • パスフレーズ: 秘密鍵を保護するためのパスワードです。設定すると、SSH接続時にこのパスフレーズの入力が必要になります。セキュリティのため、設定を強く推奨します。

生成されるファイル:

  • id_rsa: 秘密鍵。絶対に他人に知られてはいけません。
  • id_rsa.pub: 公開鍵。サーバーに登録します。

3. 公開鍵の登録 [接続先PC]

接続先のサーバーに、生成した公開鍵を登録します。

.ssh ディレクトリの作成と権限設定

接続先のユーザーのホームディレクトリに .ssh ディレクトリが存在しない場合は作成し、適切な権限を設定します。

# ユーザーのホームディレクトリに移動
cd /home/[ユーザー名] 

# .ssh ディレクトリを作成
mkdir .ssh

# .ssh ディレクトリの所有者をユーザー自身に設定
sudo chown [ユーザー名]:[ユーザーのグループ名] .ssh

# .ssh ディレクトリのパーミッションを700に設定 (所有者のみ読み書き実行可能)
chmod 700 .ssh

authorized_keys ファイルの作成と公開鍵の登録

.ssh ディレクトリ内に authorized_keys ファイルを作成し、その中に公開鍵の内容を貼り付けます。

# authorized_keys ファイルを作成
touch .ssh/authorized_keys

# authorized_keys ファイルのパーミッションを600に設定 (所有者のみ読み書き可能)
chmod 600 .ssh/authorized_keys

# 公開鍵の内容を authorized_keys に追加
# 接続元PCからscpなどで公開鍵を転送するか、手動でコピー&ペースト
# 例: scp ~/.ssh/id_rsa.pub user@remote_host:~/.ssh/id_rsa.pub
# その後、リモートホストで
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

注意: authorized_keys ファイルには、1行に1つの公開鍵を記述します。

4. SSH接続 [接続元PC]

これで、公開鍵認証方式でSSH接続ができるようになります。

ssh [ユーザー名]@[IPアドレスまたはホスト名]

パスフレーズを設定している場合は、ここでパスフレーズの入力を求められます。

Enter passphrase for key '/Users/[ユーザー名]/.ssh/id_rsa': # パスフレーズを入力

正しく設定されていれば、パスワードなしでリモートサーバーにログインできます。