SSH:より安全な認証方式(鍵認証)を設定する方法

VPSサーバーなどにリモートから接続するときに、よく利用するSSH接続ですが、パスワード認証のまま使っていませんか?

もちろん、パスワード認証でも複雑なパスワードを設定することで、ある程度セキュリティを強化する事ができますが、より安全性を高めるためには、鍵交換による認証をおすすめします。鍵交換による認証を設定することで、鍵を持った人のみがログインできるようなり、パスワード認証に比べて格段に安全性が向上します。

そこで、ここではSSHで公開鍵暗号方式で鍵認証するために必要な手順を紹介します。

動作環境

この記事は、WindowsマシンからCentOS7.4サーバーへSSH接続する環境を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

手順

鍵ペアの作成

認証で必要となる公開鍵と秘密鍵のペアを作成します。一般的に鍵ペアの作成は、接続元マシン上で実施するほうが安全ですが、手順を簡単にするためにここでは接続先サーバー上で作成します。

鍵を保存するディレクトリを作成

SSH接続で使用する一般ユーザーで接続先サーバーにログインして、ホームディレクトリに鍵を保存するディレクトリを作成します。

mkdir .ssh
chmod 700 .ssh
cd .ssh

鍵ペアの作成

OpenSSHバージョン6.5のSSHから、RSAよりも強固でパフォーマンスが良い暗号方式(楕円曲線暗号)を利用できます。そこで、ここでは現状で最強の「ed25519」を利用し、鍵ペアを作成します。

鍵ペアの保存ファイル名やパスフレーズを聞かれますが、既定値のまま[Enter]キーを押します。

ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hoge/.ssh/id_ed25519.
Your public key has been saved in /home/hoge/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:2FT3NxSN7D66/r+rv8OEVxL02Uj1NM+id7cFX++7v7o hoge@mysv.local
The key's randomart image is:
+--[ED25519 256]--+
|          . .oo*=|
|         . . o==B|
|        .    .=+O|
|       +     .o==|
|      . S   ..o.B|
|             oo=+|
|             .+o.|
|            .  o.|
|           .oE*X@|
+----[SHA256]-----+

以上でカレントディレクトリに以下の2つのファイルが生成されます。

  • id_ed25519 ←秘密鍵
  • id_ed25519.pub ←公開鍵

公開鍵の登録

次に、生成された公開鍵の内容を「authorized_keys」というファイルに登録します。

cat id_ed25519.pub >> authorized_keys
chmod 600 authorized_keys

公開鍵ファイルと秘密鍵ファイルをローカルに移動

上で作成した公開鍵と秘密鍵の2ファイルを接続元マシンに転送し、安全のため転送後サーバー上からは削除しておきます。

rm -fv id_ed25519
rm -fv id_ed25519.pub

秘密鍵を使ってSSH接続

接続元マシンのSSHクライアントソフトから、秘密鍵を指定して接続先サーバーへ接続できれば完了です。

ちなみに、Windowsでは「RLogin」「WinSCP」を使用して接続できました。Androidの「JuiceSSH」では、ed25519に未対応なようで秘密鍵を使用できませんでした。

SSH設定の変更

鍵認証で接続できることを確認したら、パスワード認証でのログインを無効化しておきます。

vi /etc/ssh/sshd_config

PasswordAuthentication行で「yes」を「no」に変更します。

PasswordAuthentication no

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

systemctl restart sshd

任意のユーザーでSSH接続時にパスワード認証でログインできないことを確認します。

まとめ

楕円曲線暗号はRSAに比べ処理が高速のようですが、通常の使用でそれを体感できるものではありません。現状で最強の暗号化方式を利用しているという安心感が得られる程度ですね。

スポンサーリンク