CentOSで安全なSSHサーバーを構築する

ローカルの開発環境だけでしか使わないサーバーは、デフォルト状態でもかまいませんが、インターネットにつながっているサーバーは、そのままではあっという間に乗っ取られてしまう可能性が高いです。

そんなわけで、堅牢なSSH接続サーバを構築したいと思います。
/etc/ssh/sshd_configを編集し、SSHデーモンを再起動します。

rootでのログインを禁止する

(修正前)

# PermitRootLogin yes


(修正後)

PermitRootLogin no

パスワード認証を禁止し、公開鍵認証へ切り替える

PasswordAuthentication no # yes -> noに変更する
ChallengeResponseAuthentication no # yes -> noに変更する
RSAAuthentication yes
PubkeyAuthentication yes

※エディタで設定する英単語を調べると便利。

sshdを再起動します。

$ sudo systemctl restart sshd

公開鍵の作成と登録

$ ssh-keygen -t rsa
Enter file in which to save the key (/home/pgen/.ssh/id_rsa): Enterを押す
Enter passphrase (empty for no passphrase): 秘密鍵を解くための呪文を入力する(分かりやすい文で構わない)
Enter same passphrase again: 確認のため、もう一度呪文を入力する
The key fingerprint is:
SHA256:4IUrlHd9QTiA4jMFhoguzT4Gag3cgZ3aQ+eEwHjI15s pgen@myserver
The key's randomart image is:
+---[RSA 2048]----+
|=++.*. ... oo    |
|=+oO.=o. .o  .   |
|o+*.Bo* o ...    |
|o=o=+E =   .     |
|ooo ooo S        |
|..+. .           |
|.. .             |
|                 |
|                 |
+----[SHA256]-----+

~/.sshにid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されます。

※RSAより強力なEd25519という鍵の方がいいみたいです。
Ed25519の鍵ペアを作るときは、-t rsaの代わりに-t ed25519を指定します。
SSHのバージョンが古いと、Ed25519は使えません。

次に、何らかの方法でid_rsa.pub(公開鍵)をサーバーのホームディレクトリに持っていきます。
VPSの管理画面はブラウザでアクセスできると思うので、ファイルマネージャーでアップロードすればいいと思います。
別にホームディレクトリでなくても構いませんが、以下の説明ではホームディレクトリに公開鍵ファイルがあるものとします。

公開鍵を登録します。

$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

公開鍵認証によるログイン

sshコマンドで秘密鍵を指定します。

$ ssh -i ~/.ssh/id_rsa アカウント@ホスト名
Enter passphrase for key '/home/pgen/.ssh/id_rsa': パスフレーズ(呪文)を入力する