RaspberryPiやUbuntuに対してSSHログイン時にGoogle Authenticatorを利用する

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を利用される方は一度ご確認頂けると良いと思います。