RaspberryPiやUbuntuに対してSSHでログイン時に、Google Authenticatorを利用する事が可能です。簡単に設定できる内容になりますので、SSHを利用される方は一度ご確認頂けると良いと思います。(分かりやすくするために、青色マーカーをつけています。)
当初公開時はRaspberryPiのみでしたが、Ubuntuも同一の手順で設定出来る事を確認しました。記事タイトル、文章にUbuntuを追記しました。
環境
RaspberryPi
Raspberry Pi 4Bを利用しました。Raspbian (32bit)のバージョンは以下の通りです。
$ sudo apt-get install lsb-release
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
スマホの準備
スマホには予め「Google Authenticator」をインストールしておいてください。
設定手順
とりあえず最新の状態にする
$ sudo apt-get update
ヒット:1 http://raspbian.raspberrypi.org/raspbian buster InRelease
取得:2 http://archive.raspberrypi.org/debian buster InRelease [32.7 kB]
取得:3 http://archive.raspberrypi.org/debian buster/main armhf Packages [392 kB]
425 kB を 7秒 で取得しました (57.1 kB/s)
パッケージリストを読み込んでいます... 完了
$ sudo apt-get full-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
常に最新の状態にしているので、ここで適用されるファイルはありませんでした。
ChallengeResponseAuthentication をyesにする
vim でも nanoでも構いませんが、sshd_configを開き、ChallengeResponseAuthenticationの値をyesに変更します。
2024/4/15 追記 ) KbdInteractiveAuthentication に名前が変わっていました。こちらの場合も同じようにyesにします(他の手順は同様です)
$ sudo vim /etc/ssh/sshd_config
libpam-google-authenticator をインストールする
$ sudo apt install libpam-google-authenticator
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
libpam-google-authenticator
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
30.4 kB のアーカイブを取得する必要があります。
この操作後に追加で 104 kB のディスク容量が消費されます。
取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian buster/main armhf libpam-google-authenticator armhf 20170702-2 [30.4 kB]
30.4 kB を 1秒 で取得しました (25.9 kB/s)
以前に未選択のパッケージ libpam-google-authenticator を選択しています。
(データベースを読み込んでいます ... 現在 43570 個のファイルとディレクトリがインストールされています。)
.../libpam-google-authenticator_20170702-2_armhf.deb を展開する準備をしています ...
libpam-google-authenticator (20170702-2) を展開しています...
libpam-google-authenticator (20170702-2) を設定しています ...
man-db (2.8.5-2) のトリガを処理しています ...
日時を確認する
日時がずれていると正しく認証が出来ないため、必ず確認を行います。
$ date
2021年 9月 15日 水曜日 20:51:29 JST
google-authenticator を実行する
$ google-authenticator
いろいろ聞かれますが、yで進めました。
表示されたQRコードをGoogle Authenticatorで読み取ります。
/etc/pam.d/sshd を編集する
$ sudo vim /etc/pam.d/sshd
sshを抜ける
$ sudo systemctl restart ssh
$ exit
これで設定が完了です。
Google Authenticatorの動作確認をする
SSHで接続すると、以下のような流れになります。
% ssh <ip_address> -l <user>
Password:
Verification code: <- ここでAuthenticatorの番号を入れる
Linux raspivpn 5.10.60-v7l+ #1449 SMP Wed Aug 25 15:00:44 BST 2021 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$
Passwordの次に、Verification codeが要求されます。Google Authenticatorで表示されているコードを入力するとSSHで入れるようになります。
まとめ
以上、RaspberryPiでSSHログイン時にGoogle Authenticatorを利用する方法でした。青色マーカーの箇所を実行すれば簡単に設定できますので、SSHを利用される方は一度ご確認頂けると良いと思います。