[FreeBSD 13.1] ssh サーバの認証方式をパスワード認証から公開鍵認証に変更する方法
前書き
FreeBSD に ssh ログインする際の認証方式をパスワード認証から公開鍵認証に変更する方法を記録しておく。
Linux (Ubuntu) とほぼほぼ同じ手順だとわかりました。
我が家では複数台の Ubuntu を動かして使っていますが、そのうちの 1 台の Ubuntu から FreeBSD に公開鍵認証で ssh 接続できるようにします。
これが意味することは、この Ubuntu 以外の ssh クライアントは FreeBSD に ssh ログインできなくなることを意味します。(そうなるように FreeBSD を設定します)
本投稿の最後に参考情報を列挙しておくので ssh の公開鍵認証の設定に慣れていない人は、そちらを先にご覧になったほうが良いかもしれません。
1. 鍵ファイル (公開鍵と秘密鍵) を作る
まずはここから。
公開鍵と秘密鍵を作る。どちらもただのファイルです。ssh-keygen コマンドで作ります。Linux だと以下のコマンドでできるでしょう。
$ cd $ cd .ssh $ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/hoge/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hoge/.ssh/id_rsa Your public key has been saved in /home/hoge/.ssh/id_rsa.pub The key fingerprint is: SHA256:akRRDihwci9PFIfnyFtcsyoIWeDyPK2Zi9DdEWx0YY8 hoge@CF-S10 The key's randomart image is: +---[RSA 4096]----+ |+oo o+=.=. | |.+ooo+.*oo | |.+.oo==.Eo. | |+o =oo+.. | | .+.ooo.S | | ..*oo.o | |. = ..+ | |.. . . | |. . | +----[SHA256]-----+ $
余談だが FreeBSD のマニュアルによると RSA の鍵長は 3072 bit で十分と考えられているとのことである。
For RSA keys, the minimum size is 1024 bits and the default is 3072 bits. Gen- erally, 3072 bits is considered sufficient.
これで公開鍵と秘密鍵が作成される。
上記のように作成すると ssh-keygen コマンドを実行したディレクトリに
- id_rsa.pub
- id_rsa
という 2 つのファイルが作成されているはずだ。
id_rsa.pub が公開鍵で id_rsa が秘密鍵だ。
2. 作った秘密鍵を FreeBSD の authorized_keys に保存する
authorized_keys も実体はただのファイルである。このファイルの中に 1 で作った公開鍵の中身を保存しておけば良い。
今回はまず FreeBSD に ssh ログインしっぱなしておいて、vi エディターで authororized_keys を作り、そこにコピペで貼り付けて保存した。
公開鍵が保存された authorized_keys は以下のようになっているだろう。
% cd % cd .ssh % /usr/home/hoge/.ssh % ls -l authorized_keys -rw-r--r-- 1 hoge hoge 737 Sep 26 01:12 authorized_keys % cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDjlGmK0KgyHmdwyX+S8ZahTj3p9xrArHPTWhzcL7BikZ4V+u6UIo/oW78sxWzeWk/SEXRnCmnoQ03vilqL0Mbt7dLWLAR/uH4dv53O6L3uFgefWT3gF9z5EH3hW16+gfoEdEU6deJkupwuBokvd9nHpKRdzsU3asDCWy6cU2pLXvhvEpIizr0mBufPDfCRrRtOlThMHisST+cYA7FYvoq27cdKF6Q9+PTUkymPbny8StndUOOzEiDgOvrP4+Hc21Ngq2eMfCp5nfpi4DAjYM/vvvJYcS+Ay2RiJqZSJ7/bEkZHt4g8kF48128YsR3F1lgvxBM7wnyzTX/WvSixxu+6nQr3dTcw8gjeg/qd7UV/tFSrQRlDACMevCM6+U1MXDsLEDYSIWgFnm942IbdvewzJri8MZjkmwIf/aZb3UAIM1dp4tD5I+hxkCdt3jEs45in1lzmOtux38sCB6lZ33yEKDDzGtzkf90OWFBcCDWgDFeSn5H8UggSBQPbTv5Jqh3qK8tkKmXqJ4h3zk06UehNhhZ2/YHyAfBDVuEtBvhl9oarK1GhUJvFg0TGvOSg2pAaH7WLnSTS1G3AXMuQLhZMaktNgBhR9X0+Bx+EaK36hryunOzHQFwDBq3O0oZCIxi/TcjhL3mVFh75mijnr+lsZlHP1ha/YX1/Q0mALoSbeQ== hoge@pasokon %
authorized_keys に公開鍵を貼り付けたら、ssh-keygen コマンドを実行した時に作成されたファイル id_rsa.pub は削除しても問題ない。
3. FreeBSD の公開鍵認証設定
/etc/ssh/sshd_config というファイル (設定ファイル) をエディターで編集すれば良い。
具体的には、以下のようにする。
PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no
1 つめの PermitRootLogin は公開鍵認証とは関係ないが、root ログインを許可するか拒否するかという設定となり、no とすることで拒否設定とした。
2 つめの PubkeyAuthentication yes は公開鍵認証を有効にする設定で、
3 つめと 4 つめをあわせてパスワード認証を禁止にしている。
このように sshd_config の編集が完了したら sudo service sshd restart コマンドで sshd を再起動させる。
これ以降、パスワード認証ではログインができなくなるとともに、authorized_keys に保存された公開鍵のペアである秘密鍵を持っていない ssh クライアントは ssh ログイン不可となる。
ssh クライアント側の設定
ssh クライアントが ssh でサーバーにログインする時に使用するファイル (ファイル名は config) を以下のように設定した。
$ cd $ cd .ssh $ cat config (途中省略) Host interface HostName 10.1.0.101 User hoge IdentityFile ~/.ssh/interface $
interface というホストを定義している。このように定義することで ssh interface とコマンドを実行すると 10.1.0.101 (我が家の FreeBSD) に公開鍵認証で ssh ログインを試みる動作となる。
IdentityFile のところにある interface というファイルが ssh-keygen で作った秘密鍵だ。もともとは id_rsa というファイル名だったがこれを都合に合わせて変更しても構わないのである。
$ ls -l interface -rw------- 1 hoge hoge 3414 9月 26 01:06 interface $ pwd /home/hoge/.ssh $ ssh interface Enter passphrase for key '/home/hoge/.ssh/interface': Last login: Tue Sep 27 00:35:05 2022 from 172.16.1.2 FreeBSD 13.1-RELEASE releng/13.1-n250148-fc952ac2212 GENERIC Welcome to FreeBSD! Release Notes, Errata: https://www.FreeBSD.org/releases/ Security Advisories: https://www.FreeBSD.org/security/ FreeBSD Handbook: https://www.FreeBSD.org/handbook/ FreeBSD FAQ: https://www.FreeBSD.org/faq/ Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/ FreeBSD Forums: https://forums.FreeBSD.org/ Documents installed with the system are in the /usr/local/share/doc/freebsd/ directory, or can be installed later with: pkg install en-freebsd-doc For other languages, replace "en" with a language code like de or fr. Show the version of FreeBSD installed: freebsd-version ; uname -a Please include that output and any error messages when posting questions. Introduction to manual pages: man man FreeBSD directory layout: man hier To change this login announcement, see motd(5). Want to use sed(1) to edit a file in place? Well, to replace every 'e' with an 'o', in a file named 'foo', you can do: sed -i.bak s/e/o/g foo And you'll get a backup of the original in a file named 'foo.bak', but if you want no backup: sed -i '' s/e/o/g foo %
以上のようにして FreeBSD に ssh ログイン (公開鍵認証で) ができた。
[参考情報]
FreeBSD マニュアル
ssh-keygen
https://www.freebsd.org/cgi/man.cgi?ssh-keygen
sshd
https://www.freebsd.org/cgi/man.cgi?sshd(8)
sshd_config
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
過去の投稿