2025年4月7日月曜日

Rocky Linux: SSH鍵認証設定(サーバー鍵生成・Windows/PuTTY編)



Rocky Linux: SSH鍵認証設定(サーバー鍵生成・Windows/PuTTY編)


この記事では、Rocky Linuxサーバー上でSSHキーペアを作成し、Windowsクライアント(WinSCP, PuTTYgen, PuTTYを使用)からその鍵を使ってSSH接続を設定、最終的にパスワード認証を無効にして鍵認証のみ許可する手順を解説します。

セキュリティに関する注意:
通常、SSHの秘密鍵はクライアントPCで作成し、サーバーに移動させないのが最も安全です。この手順ではサーバーで作成した秘密鍵をクライアントPCにコピーします。秘密鍵の取り扱いには十分注意し、ファイル転送中やクライアントPC上での管理を厳重に行ってください。可能であればクライアントPCで鍵ペアを作成する方法を検討してください。

前提条件

手順1: サーバー (Rocky Linux) でSSHキーペアを作成する

まず、Rocky Linuxサーバーにログインし、SSHキーペア(公開鍵と秘密鍵)を作成します。

# ログインユーザーで実行
# -t で鍵の種類を指定 (ed25519推奨)
# -f で鍵ファイルのパスと名前を指定 (例: ~/.ssh/server_generated_key)
ssh-keygen -t ed25519 -f ~/.ssh/server_generated_key

# 実行すると、鍵の保存場所とパスフレーズを聞かれます。
# Enter file in which to save the key (...): そのままEnterか、変更したければ入力
# Enter passphrase (empty for no passphrase): ★必ず強力なパスフレーズを設定してください★
# Enter same passphrase again: ★確認のためもう一度入力★

これで、指定した場所に秘密鍵 (server_generated_key) と公開鍵 (server_generated_key.pub) が作成されます。

手順2: サーバー (Rocky Linux) で公開鍵を認証用ファイルに登録する

作成した公開鍵 (server_generated_key.pub) を、SSH接続を許可するための authorized_keys ファイルに追記します。

# .ssh ディレクトリがなければ作成し、パーミッションを設定 (所有者のみアクセス可)
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# authorized_keys ファイルがなければ作成し、パーミッションを設定 (所有者のみ読み書き可)
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 作成した公開鍵の内容を authorized_keys に追記
cat ~/.ssh/server_generated_key.pub >> ~/.ssh/authorized_keys

# SELinux が有効な場合、コンテキストを復元 (念のため)
restorecon -Rv ~/.ssh

これで、この公開鍵に対応する秘密鍵を持つクライアントからの接続準備ができました。

手順3: WinSCPで秘密鍵をWindowsクライアントにコピーする

Windows PCでWinSCPを起動し、Rocky Linuxサーバーにパスワード認証で接続します。

  1. サーバー側のファイルブラウザで、手順1で作成した秘密鍵ファイル (例: /home/your_username/.ssh/server_generated_key) がある場所に移動します。 (.ssh は隠しフォルダなので、表示設定が必要な場合があります)
  2. その秘密鍵ファイルを、ローカルPC(Windows)のわかりやすい場所(例: C:\Users\YourUsername\ssh_keys\ など、自分で作成したフォルダ)にドラッグ&ドロップなどでダウンロード(コピー)します。
注意: ダウンロードしているのは非常に重要な秘密鍵です。ダウンロード先のフォルダやファイルは厳重に管理してください。

手順4: PuTTYgenで秘密鍵をPuTTY形式 (.ppk) に変換する

PuTTYはOpenSSH形式の秘密鍵を直接扱えないため、PuTTYgenを使ってPuTTYが扱える形式 (.ppk) に変換します。

  1. Windows PCでPuTTYgenを起動します。
  2. メニューの [Conversions] から [Import key] を選択します。
  3. ファイル選択ダイアログで、手順3でWinSCPを使ってダウンロードした秘密鍵ファイル (server_generated_key) を選択します。
  4. 手順1で秘密鍵に設定したパスフレーズを入力するよう求められるので、入力します。
  5. 鍵の情報が表示されたら、[Save private key] ボタンをクリックします。
  6. ファイルの種類が「PuTTY Private Key Files (*.ppk)」になっていることを確認し、ファイル名(例: server_generated_key.ppk)を付けて保存します。保存場所は先ほど秘密鍵を置いたフォルダと同じ場所が良いでしょう。

これで、PuTTYで使える .ppk 形式の秘密鍵ファイルが作成されました。

手順5: PuTTYで鍵認証接続を設定する

PuTTYを起動し、今作成した .ppk ファイルを使ってサーバーに接続する設定を行います。

  1. PuTTYの左側メニューで [Connection] -> [SSH] -> [Auth] を選択します。
  2. [Private key file for authentication:] の下にある [Browse...] ボタンをクリックします。
  3. ファイル選択ダイアログで、手順4で作成した .ppk ファイル (server_generated_key.ppk) を選択し、[開く] をクリックします。
  4. 左側メニューで一番上の [Session] を選択します。
  5. [Host Name (or IP address)] にRocky LinuxサーバーのIPアドレスまたはホスト名を入力します。
  6. [Saved Sessions] の下の入力欄に、この接続設定を保存するための名前(例: MyRockyServer-Key)を入力し、[Save] ボタンをクリックして設定を保存します。

手順6: PuTTYで鍵認証接続をテストする

保存した設定を使って、実際に鍵認証でログインできるか試します。

  1. PuTTYの [Saved Sessions] リストから、先ほど保存した設定名 (MyRockyServer-Key) を選択し、[Load] をクリックしてから [Open] をクリックします。
  2. コンソールが開いたら、ログインユーザー名 (login as:) を入力してEnterを押します。
  3. 手順1で設定した秘密鍵のパスフレーズを入力するよう求められたら (Passphrase for key ...:)、入力してEnterを押します。

サーバーのパスワードを聞かれずに、コマンドプロンプトが表示されれば鍵認証でのログインは成功です。

手順7: サーバー設定を変更し、鍵認証のみ許可する (rootログインも鍵認証で許可)

鍵認証でログインできることを確認したら、セキュリティ向上のためにパスワード認証を無効にします。ここでは、rootユーザーでのログインも鍵認証であれば許可する設定にします。

【最重要】設定変更中の注意:
この設定変更を行うと、パスワードでのSSHログインは一切できなくなります。万が一、設定ミスや秘密鍵の紛失があるとサーバーにログインできなくなる可能性があります
必ず、現在接続しているPuTTYセッションは閉じずに、設定変更後に別のPuTTYウィンドウから新しい接続を試してログインできることを確認してから、元のセッションを閉じてください。
  1. 鍵認証でログインしているPuTTYセッションで、SSH設定ファイルを開きます。
    sudo nano /etc/ssh/sshd_config
  2. ファイル内で以下の項目を探し、値を変更または確認します。(行頭の # はコメントなので削除します)
    # パスワード認証を無効化
    PasswordAuthentication no
    
    # チャレンジレスポンス認証も無効化
    ChallengeResponseAuthentication no
    
    # 公開鍵認証が有効であることを確認
    PubkeyAuthentication yes
    
    # rootのログインを鍵認証のみ許可 (パスワードではログインさせない)
    PermitRootLogin prohibit-password

    ※もしPermitRootLoginの行が存在しない場合は、追記してください。prohibit-password は「パスワード認証は禁止するが、鍵認証ならrootログインを許可する」という意味です。もしrootログイン自体を禁止したい場合は no にします。

  3. ファイルを保存して閉じます。(nanoなら Ctrl+O -> Enter -> Ctrl+X)
  4. SSHサービスを再起動して設定を反映させます。
    sudo systemctl restart sshd
    エラーが出ないことを確認します。
    sudo systemctl status sshd
    (Active: active (running) と表示されていればOK)

手順8: 最終テスト

  1. 作業していたPuTTYセッションは開いたまま、新しいPuTTYウィンドウを起動します。
  2. 保存したセッション (MyRockyServer-Key) を使って再度ログインを試みます。
  3. ユーザー名を入力し、秘密鍵のパスフレーズを入力して、パスワードを聞かれずにログインできることを確認します。
  4. (可能であれば) パスワード認証を強制するオプションなどで接続を試み、パスワード認証が拒否されることを確認します。
  5. 新しいウィンドウで正常にログインできることが確認できたら、作業していた元のPuTTYセッションを閉じても安全です。

まとめ

これで、Rocky LinuxサーバーへのSSH接続が公開鍵認証のみに限定され、WindowsクライアントからPuTTYを使って安全に接続できるようになりました。rootユーザーでのログインも鍵認証であれば可能です。

秘密鍵 (.ppkファイル) は絶対に漏洩しないよう、厳重に管理してください。

0 件のコメント:

コメントを投稿

Claude Codeをwindows11に導入してVSCとつなげてみた

  Claude Codeをwindows11に導入してVSCとつなげてみた WSLインストール VSCとClaude Code連携できるとの話を聞いて拡張機能を見てみたがどうも違うらしい。とりあえず、windowsにインストールしてみる。 npm install -g @ant...