最近、新しいサーバーを設定する機会が多いので、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をユーザー権限で立ち上げて鍵ペアを保存するフォルダを作成します。
1 |
> mkdir .ssh |
次に以下のコマンドを入力してEnterキーを押します。
1 |
> ssh-keygen -t ed25519 -f .ssh/id_ed25519_example.com_key -C " " |
パスフレーズを聞いてきますので入力します。(2回入力します。)
1 2 |
Enter passphrase (empty for no passphrase): Enter same passphrase again: |
公開鍵認証の鍵ペアが生成されました。
鍵ペアの生成場所は「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
1 |
# vi /etc/ssh/sshd_config |
1 2 3 4 5 6 |
...省略 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key ...省略 |
サーバーのホスト鍵をリセット
サーバーのホスト鍵のペアを念のためにリセットします。(※鍵ペアを削除してsshdをリスタートすると鍵ペアが再生成されます。)
1 2 |
# shred -u /etc/ssh/*_key /etc/ssh/*_key.pub # systemctl restart sshd |
ここで一旦SSH接続を切って再度SSHで接続し直しましょう。
サーバーに公開鍵を転送
Windows10で生成した公開鍵をサーバーに送信します。
まず、公開鍵認証でSSH接続するユーザー「sshadmin」を作成します。
1 |
# useradd -d /home/sshadmin -s /bin/bash -G wheel sshadmin |
ユーザー「sshadmin」のパスワードを設定します。
1 |
# passwd sshadmin |
次に、作成したユーザーにsu -でスイッチし、ユーザーのホームディレクトリに移動します。
1 2 |
# su - sshadmin $ cd ~ |
RLoginのSFTPで公開鍵をサーバーに転送します。(※ユーザーのホームディレクトリ「/home/sshadmin」に転送)
公開鍵の転送が完了したら以下のコマンドを実行して.sshディレクトリを作成し、その中のauthorized_keysに公開鍵を書き込み、最後に転送した公開鍵のファイルを削除します。
1 2 3 4 5 6 |
$ mkdir .ssh $ chmod 700 .ssh $ cat id_ed25519_example.com_key.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys $ rm -f id_ed25519_example.com_key.pub $ exit |
【解説】
1行目:.sshディレクトリを作成
2行目:.sshディレクトリのパーミッションを700に変更
3行目:転送した公開鍵の情報を.ssh/authorized_keysに書き込む
4行目:.ssh/authorized_keysのパーミッションを600に変更
5行目:転送した公開鍵ファイルを削除
6行目:スイッチしたユーザ「sshadmin」からrootに戻る
ここまで終了したら、新しいコンソールを立ち上げ、ユーザー「sshadmin」で公開鍵認証のSSHの接続と、suコマンドでrootになれるかテストを行いましょう。
テストの結果、正常に公開鍵認証でのSSH接続ができてrootになれればOKです。
【備考】RLoginでの公開鍵認証SSH接続の方法
RLoginの「Server Select」画面で「編集」をクリックし、「Server Edit Entry」画面の「SSH認証鍵」ボタンをクリックするとファイルを「開く」画面が出ます。そこで秘密鍵の選択すると公開鍵認証で接続できます。
※公開鍵認証からパスワード認証に戻す場合は、「SSH認証鍵」ボタンをクリック⇒ファイルを開く画面の「キャンセル」をクリックで公開鍵認証が無効になりパスワード認証に戻ります。
SSHサーバーのセキュリティ設定
各種設定ファイルを編集してセキュリティの設定をしていきます。
rootになれるユーザーを指定
/etc/pam.d/suを編集します。
1 |
# vi /etc/pam.d/su |
「auth required pam_wheel.so use_uid」のコメントを外して有効化します。
1 2 |
# Uncomment the following line to require a user to be in the "wheel" group. auth required pam_wheel.so use_uid |
SSHサーバーの設定ファイルの変更
SSHサーバーの設定ファイル(/etc/ssh/sshd_config)を編集していきます。
1 |
# vi /etc/ssh/sshd_config |
空のパスワードを無効化
「PermitEmptyPasswords」を「no」に設定します。(コメントアウトされている場合はコメントアウトを外して明示的に「no」に設定します。)
1 2 3 |
...省略 PermitEmptyPasswords no ...省略 |
公開鍵認証以外を無効化
「PasswordAuthentication」と「ChallengeResponseAuthentication」を「no」に設定します。(コメントアウトされている場合はコメントアウトを外して明示的に「no」に設定します。)
1 2 3 4 5 6 7 |
...省略 PasswordAuthentication no # Change to no to disable s/key passwords ChallengeResponseAuthentication no ...省略 |
ログインできるユーザを指定
/etc/ssh/sshd_configの末尾に以下を追加します。
1 |
AllowUsers sshadmin |
rootによるSSHログインを禁止
/etc/ssh/sshd_configの末尾に以下を追加します。
1 |
PermitRootLogin no |
暗号スイートの設定
暗号スイートの設定を/etc/ssh/sshd_configの末尾に追加します。
1 2 3 4 |
Protocol 2 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com |
SSHサーバーの設定ファイルの編集はこれで終了です。
変更・追加した設定をまとめると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
...省略 PermitEmptyPasswords no PasswordAuthentication no # Change to no to disable s/key passwords ChallengeResponseAuthentication no ...省略 #以下は末尾に追加 AllowUsers sshadmin PermitRootLogin no Protocol 2 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com |
SSHサーバーの再起動
SSHサーバーを再起動します。
1 |
# systemctl restart sshd |
設定は全て完了しましたが、まだSSH接続を切らずに最終テストを行います。
最終テスト
最後に、もう一度SSHで接続テストを行います。
まず、既存のSSH接続は維持した上で新しいターミナルを立ち上げ、パスワード認証でSSHログインをして拒否されることを確認します。
以下の画像のようにパスワード認証が拒否されれることを確認しましょう。
次に、更に新しいターミナルを立ち上げ、公開鍵認証で正常に接続できてsuでrootにもなれれば、全ての設定は完了です。
まとめ
- SSHでサーバーに接続するなら公開鍵認証は必須
- Windows10は標準機能で「ssh-keygen」が利用可能
- 公開鍵認証の鍵ペアを生成したら公開鍵のみサーバーに転送
- 公開鍵認証を有効化したらパスワード認証は必ず無効化
- SSHサーバーのセキュリティ設定も忘れずに
以上で解決です。