SSHデーモン公開鍵認証有効化・パスワード認証無効化手順書
背景
SSHサーバーの初期設定では、ユーザー名とパスワードさえ分かればサーバーにログインすることができるが、パスワードはsudoなどで用いられるため、入力しやすく必ずしも強いとは言えないものであることが多く、その場合、総当たり攻撃でユーザー名とパスワードの組み合わせを発見されるケースに対して脆弱である。 端末一つひとつに対応した鍵ペアを用いた公開鍵認証を用いることで、総当たり攻撃の可能性を緩和することができる。 1. サーバーの操作に用いる手元コンピュータでSSHの鍵ペアを生成する。
$ ssh-keygen
パスフレーズのある鍵にすることで、パスフレーズの入力がなければ使用できない鍵になる。万が一秘密鍵が盗まれても、パスフレーズが知られていなければ、鍵が悪用されることはない。
2. 生成された鍵ペアに対応する公開鍵の内容を確認する。
$ cat ~/.ssh/id_rsa.pub
鍵ペアを生成すると、id_rsaとid_rsa.pubの2種類のファイルが生成される。
id_rsa.pub: 公開鍵。
AさんがBさんに情報を送るとき、AさんはBさんの公開鍵を使って情報を暗号化してから送る。
そのため、AさんとBさんとの間で公開鍵暗号を用いて通信を行う際は、まずお互いの公開鍵を交換する。
id_rsa: 秘密鍵。
Bさんの公開鍵で暗号化された情報は、Bさんの秘密鍵だけが復号できる。
Bさんの秘密鍵が漏洩することは、Bさんの公開鍵で暗号化された情報がBさん以外の人でも閲覧できるようになることを意味する。そのため、秘密鍵は安全に保管しなければならない。また、他の端末で使い回してはならない。
サーバーにSSHの公開鍵を登録する。
code:~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGvMQ98BAAXu2ZtrSq2RyDZ1x81IeT/0zZllkZhUv5P1
正常な場合、mgn901.iconが持っている鍵ペアでサーバーにログインできるようになる。
サーバーのSSHデーモンの設定を変更する。
1. 次のファイルを書き換える。
code:/etc/ssh/sshd_config
# SSHサーバーのポート番号を変更(例: 2222の場合)
Port 2222
# rootユーザーでのログイン禁止
PermitRootLogin no
# パスワードでのログイン禁止
PasswordAuthentication no
2. 設定ファイルの内容を確認する。
$ sudo sshd -t
正常な場合、sshd: no hostkeys available -- exiting.と出力されるか、何も出力されない。
3. SSHデーモンを再起動する。
$ sudo systemctl restart sshd.service
参考にした資料