Windows10で公開鍵認証の鍵ペアを生成してサーバーにSSH接続する

Windows10で公開鍵認証の鍵ペアを生成してサーバーにSSH接続する PC

最近、新しいサーバーを設定する機会が多いので、Windows10にて公開鍵認証の鍵ペアを生成してサーバーに転送し、公開鍵認証でSSH接続するまでの手順をまとめておきます。

■動作確認環境
Windows10 Pro
CentOS 7.7

スポンサーリンク

設定する内容

今回、設定する内容は、以下の通りです。

  • 公開鍵認証のデジタル署名アルゴリズムは「ed25519」を利用
  • 秘密鍵にはパスフレーズを設定
  • パスワード認証方式を無効化(公開鍵認証以外は全て無効にする。)
  • SSHでログインできるユーザーを指定(今回は「sshadmin」というユーザーだけがSSHログインできるように設定)
  • rootになれるユーザーを指定(今回は「sshadmin」というユーザーだけがrootなれるように設定)
スポンサーリンク

Windows10で公開鍵認証の鍵ペアを生成

はじめに公開鍵認証の鍵ペアをWindows10で作成します。(※現在のWindows10では「ssh-keygen.exe」が標準で利用できるので「Git Bash」は不要です。)

鍵ペアを生成する際のルールは以下のとおりとします。

  • 署名アルゴリズムを-tオプションで「ed25519」に指定
  • 生成するファイル名を-fオプションで「id_ed25519_example.com_key」と指定
  • コメントは-Cオプションで" "と入力して無しに指定

まず、PowerShellをユーザー権限で立ち上げて鍵ペアを保存するフォルダを作成します。

次に以下のコマンドを入力してEnterキーを押します。

パスフレーズを聞いてきますので入力します。(2回入力します。)

公開鍵認証の鍵ペアが生成されました。

Windows10で公開鍵認証の鍵ペア生成完了

鍵ペアの生成場所は「C:\Users\【ユーザー名】\.ssh」内となります。

公開鍵認証の鍵ペアの生成場所

拡張子の無いファイルが秘密鍵です。秘密鍵はローカルで誰にも見られないように大切に保管します。(※外部には非公開)

「.pub」という拡張子が付いたファイルが公開鍵となります。この公開鍵をSSH接続したいサーバーに登録します。(※外部に公開)

スポンサーリンク

SSHでサーバーに接続

パスワード認証でサーバーにSSHログイン

まず、パスワード認証でサーバーにSSHログインします。(今回はSSHターミナルのRLoginを利用して解説していきます。)

不要なデジタル署名アルゴリズムの無効化

次に、vi等でSSHサーバーの設定ファイル(/etc/ssh/sshd_config)を編集し、利用する「ed25519」以外の不要なデジタル署名アルゴリズムをコメントアウトして無効化します。

【無効化するデジタル署名アルゴリズムのキー】

  • ssh_host_rsa_key
  • ssh_host_dsa_key
  • ssh_host_ecdsa_key

サーバーのホスト鍵をリセット

サーバーのホスト鍵のペアを念のためにリセットします。(※鍵ペアを削除してsshdをリスタートすると鍵ペアが再生成されます。)

ここで一旦SSH接続を切って再度SSHで接続し直しましょう。

サーバーに公開鍵を転送

Windows10で生成した公開鍵をサーバーに送信します。

まず、公開鍵認証でSSH接続するユーザー「sshadmin」を作成します。

ユーザー「sshadmin」のパスワードを設定します。

次に、作成したユーザーにsu -でスイッチし、ユーザーのホームディレクトリに移動します。

RLoginのSFTPで公開鍵をサーバーに転送します。(※ユーザーのホームディレクトリ「/home/sshadmin」に転送)

RLoginのSFTPで公開鍵をサーバーに転送

公開鍵の転送完了

公開鍵の転送が完了したら以下のコマンドを実行して.sshディレクトリを作成し、その中のauthorized_keysに公開鍵を書き込み、最後に転送した公開鍵のファイルを削除します。

【解説】
1行目:.sshディレクトリを作成
2行目:.sshディレクトリのパーミッションを700に変更
3行目:転送した公開鍵の情報を.ssh/authorized_keysに書き込む
4行目:.ssh/authorized_keysのパーミッションを600に変更
5行目:転送した公開鍵ファイルを削除
6行目:スイッチしたユーザ「sshadmin」からrootに戻る

ここまで終了したら、新しいコンソールを立ち上げ、ユーザー「sshadmin」で公開鍵認証のSSHの接続と、suコマンドでrootになれるかテストを行いましょう。

設定が間違っていた際にSSHで接続不能になる恐れがありますので、今現在接続しているrootでのSSH接続は切らずに接続を維持した状態で、新しいコンソールを立ち上げて公開鍵認証でのSSH接続テストを行いましょう。

テストの結果、正常に公開鍵認証でのSSH接続ができてrootになれればOKです。

【備考】RLoginでの公開鍵認証SSH接続の方法

RLoginの「Server Select」画面で「編集」をクリックし、「Server Edit Entry」画面の「SSH認証鍵」ボタンをクリックするとファイルを「開く」画面が出ます。そこで秘密鍵の選択すると公開鍵認証で接続できます。

RLoginでの公開鍵認証SSH接続の方法(1)

RLoginでの公開鍵認証SSH接続の方法(2)

※公開鍵認証からパスワード認証に戻す場合は、「SSH認証鍵」ボタンをクリック⇒ファイルを開く画面の「キャンセル」をクリックで公開鍵認証が無効になりパスワード認証に戻ります。

SSHサーバーのセキュリティ設定

各種設定ファイルを編集してセキュリティの設定をしていきます。

rootになれるユーザーを指定

/etc/pam.d/suを編集します。

「auth required pam_wheel.so use_uid」のコメントを外して有効化します。

SSHサーバーの設定ファイルの変更

SSHサーバーの設定ファイル(/etc/ssh/sshd_config)を編集していきます。

空のパスワードを無効化

「PermitEmptyPasswords」を「no」に設定します。(コメントアウトされている場合はコメントアウトを外して明示的に「no」に設定します。)

公開鍵認証以外を無効化

「PasswordAuthentication」と「ChallengeResponseAuthentication」を「no」に設定します。(コメントアウトされている場合はコメントアウトを外して明示的に「no」に設定します。)

ログインできるユーザを指定

/etc/ssh/sshd_configの末尾に以下を追加します。

rootによるSSHログインを禁止

/etc/ssh/sshd_configの末尾に以下を追加します。

暗号スイートの設定

暗号スイートの設定を/etc/ssh/sshd_configの末尾に追加します。

SSHサーバーの設定ファイルの編集はこれで終了です。

変更・追加した設定をまとめると以下のようになります。

SSHサーバーの再起動

SSHサーバーを再起動します。

設定は全て完了しましたが、まだSSH接続を切らずに最終テストを行います。

最終テスト

最後に、もう一度SSHで接続テストを行います。

まず、既存のSSH接続は維持した上で新しいターミナルを立ち上げ、パスワード認証でSSHログインをして拒否されることを確認します。

以下の画像のようにパスワード認証が拒否されれることを確認しましょう。

パスワード認証が拒否された際の表示

次に、更に新しいターミナルを立ち上げ、公開鍵認証で正常に接続できてsuでrootにもなれれば、全ての設定は完了です。

まとめ

  • SSHでサーバーに接続するなら公開鍵認証は必須
  • Windows10は標準機能で「ssh-keygen」が利用可能
  • 公開鍵認証の鍵ペアを生成したら公開鍵のみサーバーに転送
  • 公開鍵認証を有効化したらパスワード認証は必ず無効化
  • SSHサーバーのセキュリティ設定も忘れずに

以上で解決です。