ローカルの開発環境だけでしか使わないサーバーは、デフォルト状態でもかまいませんが、インターネットにつながっているサーバーは、そのままではあっという間に乗っ取られてしまう可能性が高いです。
そんなわけで、堅牢な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': パスフレーズ(呪文)を入力する