実践的攻防演習:LinuxでのSSHキー設定とログイン利用
はじめに
SSHキー認証は、公開鍵と秘密鍵のペアを利用した認証方式です。公開鍵をサーバーの特定のアカウントに追加し、クライアント側で秘密鍵を使用することで認証とログインを完了できます。これにより、秘密鍵がない限り、誰もSSHパスワードをブルートフォースしてリモートログインすることはできません。さらに、公開鍵を他のアカウントやホストにコピーすれば、同じ秘密鍵でログインすることも可能です。
本記事では、Linuxサーバー上で鍵ペアを作成し、公開鍵をアカウントに追加し、SSHを設定し、最後にクライアントからログインする方法を説明します。Linuxの後方浸透でシェル権限を取得した後、ssh-keygenコマンドを使用して鍵ペアを生成します。
鍵ペアの生成
まず、サーバー上で鍵ペアを生成します。以下のコマンドを実行します。ここでは、より安全で効率的なEd25519アルゴリズムを使用します。
ssh-keygen -t ed25519 -C "my_secure_key"
コマンドを実行すると、以下のようなプロンプトが表示されます。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): # Enterキーを押してデフォルトのパスを使用
Enter passphrase (empty for no passphrase): # パスフレーズを入力、またはEnterキーを押して空にする
Enter same passphrase again: # パスフレーズを再入力
ssh-keygenの主なパラメータをいくつか紹介します。
-t # 鍵のタイプを指定
-b # 鍵の長さを指定(RSAの場合)
-C # コメントを追加
現在のrootディレクトリに`.ssh`という隠しディレクトリが生成され、その中に2つの鍵ファイルが含まれています。`id_ed25519`が秘密鍵、`id_ed25519.pub`が公開鍵です。
サーバーへの公開鍵の設置
次に、生成した公開鍵をサーバーの該当アカウントに設置します。まず、`.ssh`ディレクトリに移動し、`authorized_keys`ファイルに公開鍵を追加します。設置後、`authorized_keys`ファイルのパーミッションを600、ディレクトリのパーミッションを700に設定する必要があります。
cd ~/.ssh
# 公開鍵をauthorized_keysファイルに追記する
echo "$(cat id_ed25519.pub)" >> authorized_keys
# ファイルとディレクトリのパーミッションを設定
chmod 600 authorized_keys
chmod 700 ~/.ssh
公開鍵の設置の注意点:単一の山括弧(`>`)はファイル内容をすべて置き換えます;二重の山括弧(`>>`)は追記します。これにより公開鍵の設置が完了します。接続が成功するためには、ファイルのパーミッションが正しいことを保証してください。
SSHの設定とキーログイン機能の有効化
SSHサーバーの設定ファイル`/etc/ssh/sshd_config`を編集し、キーログイン機能を有効にします。
# PubkeyAuthenticationを有効にする
PubkeyAuthentication yes
# 認可された公開鍵ファイルのパスを指定(デフォルト値だが明示的に記述)
AuthorizedKeysFile .ssh/authorized_keys
# パスワード認証を無効にする(セキュリティ強化のため推奨)
PasswordAuthentication no
設定を反映させるために、SSHサービスを再起動します。多くの现代的なLinuxディストリビューションでは、systemctlコマンドを使用します。
systemctl restart sshd
クライアントからの接続
サーバーから秘密鍵(`id_ed25519`)をダウンロードし、ローカルマシンでSSH接続ソフトウェア(例:PuTTY、OpenSSHクライアント)を使用して接続します。接続時に秘密鍵ファイルを指定し、パスフレーズを入力すればログインが完了します。