LInuxのOpenSSHサーバーに鍵認証でログインできるよう設定する方法

LInuxのOpenSSHサーバーに鍵認証でログインできるよう設定する方法

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

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

そこでここでは、Linux環境で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に比べ処理が高速のようですが、通常の使用でそれを体感できるものではありません。現状で最強の暗号化方式を利用しているという安心感が得られる程度ですね。