🔐

SSHの公開鍵認証でパスワード入力なし!安全で便利なLinux接続設定ガイド

に公開

はじめに

サーバー管理や開発作業でLinuxサーバーにSSH接続する際、毎回パスワードを入力するのは面倒ですよね。かといって、パスワードを短くしたり使い回したりするのはセキュリティ上非常に危険です。

そこで活用したいのがSSHの公開鍵認証です。公開鍵認証は、パスワード認証よりもはるかに安全で、一度設定してしまえばパスワード入力なしでスムーズに接続できるようになります。

この記事では、自身のWikiメモを元に、クライアントPCからLinuxサーバーへのSSH公開鍵認証によるパスワードレス接続設定の手順を、備忘録として詳細に解説します。

公開鍵認証とは? なぜ安全で便利なのか

公開鍵認証は、「秘密鍵」と「公開鍵」というペアの鍵を使った認証方式です。

  1. クライアントPC: 自分だけが持つ「秘密鍵」を保管します。
  2. サーバー: 接続を許可するクライアントの「公開鍵」を保管します。

接続を試みると、サーバーは公開鍵を使って「このクライアントは対応する秘密鍵を持っているか」を安全に確認します。秘密鍵はクライアントPCから一切外に出ることはなく、公開鍵から秘密鍵を特定することも非常に困難なため、パスワード認証よりもセキュリティが高まります。

さらに、一度設定すればパスワード入力が不要になるため、利便性も向上します。

Step 1: クライアントPCでSSH鍵ペアを生成する

まずは、SSH接続を行うクライアントPC(あなたのPC)で、秘密鍵と公開鍵のペアを生成します。

# 鍵ペアを生成(-tでアルゴリズム、-bでビット数、-Cでコメントを指定)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: RSA暗号方式を使用。より新しいed25519も推奨されます。
  • -b 4096: 鍵のビット数。2048以上が推奨されます。
  • -C "your_email@example.com": 鍵にコメントを付与。メールアドレスなどを入れると管理しやすくなります。

コマンドを実行すると、以下のような対話形式で質問されます。

  1. Enter file in which to save the key (/home/youruser/.ssh/id_rsa):
    鍵ファイルを保存する場所とファイル名。デフォルトのまま(~/.ssh/id_rsa)で問題ありません。
  2. Enter passphrase (empty for no passphrase):
    秘密鍵を保護するためのパスフレーズ。セキュリティ向上のため、設定することを強く推奨します。 パスフレーズを設定すると、SSH接続時にこのパスフレーズの入力が必要になりますが、万が一秘密鍵が漏洩しても、パスフレーズを知らなければ不正利用を防げます。パスワードレス接続を優先する場合は空欄でも構いません(その場合もEnterを2回押す)。
  3. Enter same passphrase again:
    パスフレーズの再入力。

このコマンドにより、~/.ssh/ディレクトリに以下の2つのファイルが生成されます。

  • id_rsa: 秘密鍵です。誰にも見せてはいけません。厳重に管理してください。
  • id_rsa.pub: 公開鍵です。これをサーバーに配置します。

Step 2: 公開鍵をサーバーにアップロードする

生成した公開鍵 (id_rsa.pub) を、SSH接続したいLinuxサーバーにアップロードします。

いくつかの方法がありますが、ssh-copy-idコマンドを使うのが最も簡単で確実です。

# 公開鍵をサーバーにコピー
ssh-copy-id -i ~/.ssh/id_rsa.pub user@your_server_ip_or_domain
  • -i ~/.ssh/id_rsa.pub: コピーする公開鍵のファイルを指定。
  • user@your_server_ip_or_domain: サーバーのユーザー名とIPアドレスまたはドメイン名。

このコマンドは、初回接続時にパスワード認証を求め、成功するとサーバーの~/.ssh/authorized_keysファイルに公開鍵を自動的に追加してくれます。

ssh-copy-idが使えない環境の場合は、scpなどで公開鍵ファイルをサーバーにコピーし、手動で~/.ssh/authorized_keysに追加します。

# 手動で追加する場合(例)
# 1. 公開鍵をサーバーにコピー
scp ~/.ssh/id_rsa.pub user@your_server_ip_or_domain:/tmp/id_rsa.pub

# 2. サーバーにSSH接続し、公開鍵をauthorized_keysに追加
ssh user@your_server_ip_or_domain
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

# 3. authorized_keysのパーミッションを設定(必須)
chmod 600 ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub # 一時ファイルを削除
exit

Step 3: サーバー側のSSH設定を変更する(任意だが推奨)

セキュリティをさらに強化するため、サーバー側のSSH設定 (/etc/ssh/sshd_config) でパスワード認証を無効化することを強く推奨します。これにより、公開鍵認証以外の方法でのログインができなくなります。

sudo vi /etc/ssh/sshd_config

以下の行を見つけて、設定を変更します。

/etc/ssh/sshd_config
# パスワード認証を無効化
PasswordAuthentication no

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

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

sudo systemctl restart sshd

【注意】
パスワード認証を無効にする前に、必ず公開鍵認証でログインできることを確認してください。 無効にした後にログインできなくなると、サーバーにSSHでアクセスできなくなります。

Step 4: SSH接続をテストする

クライアントPCから、通常通りSSH接続を試します。

ssh user@your_server_ip_or_domain

パスフレーズを設定した場合は、その入力が求められますが、パスワードの入力は不要になるはずです。パスフレーズを空欄にした場合は、そのままパスワードなしでログインできるはずです。

おわりに

SSHの公開鍵認証を設定することで、日々のサーバー管理や開発作業の効率と安全性が飛躍的に向上します。特に、サーバー側でパスワード認証を無効化することで、ブルートフォースアタック(総当たり攻撃)などのリスクを大幅に低減できます。

この記事が、あなたのSSH環境をより安全で快適にするための一助となれば幸いです。


この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MEANTECH
https://meantech.fontfontfont.com/

Discussion