SSHの接続は鍵認証にしてはいるんだが、さらにセキュアにしたくGoogle Authenticator をいれてみたログ

今回すること

事前準備

設定

CentOS7にGoogle Authenticatorをインストール

※ SSHでサーバーに接続しrootになっている状態とする

# yum install pam-devel  
# cd /usr/local/src
# git clone https://github.com/google/google-authenticator.git
# cd google-authenticator/libpam
# ./bootstrap.sh
# ./configure
# make
# make install
# ln -s /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/pam_google_authenticator.so

sshログインするユーザーに公開鍵を登録しておく

予め作成したログイン用の公開鍵(id_rsa.pub)をログインするユーザーに登録しておく

以下はmacのターミナルで鍵を作成して登録した手順。すでに鍵認証でログインできているなら省略してよし

mac> ssh-keygen 
なにやらでてくるけどすべてエンター
mac> scp ~/.ssh/id_rsa.pub LOGIN_USER@HOSTNAME:
mac> ssh LOGIN_USER@HOSTNAME;
server$ cat id_rsa.pub >> ~/.ssh/authorized_keys
server$ chmod 600 ~/.ssh/authorized_keys

sshdの設定を修正し認証キーとGoogleAuthenticatorで認証されるようにする

※ 再度サーバーにrootログインしているものとする

# vi /etc/ssh/sshd_config
以下を追記
-----
Protocol 2 ← SSH2のみとする
PermitRootLogin no          # Rootログインを禁止
PubkeyAuthentication yes    # 公開鍵認証を許可
PasswordAuthentication no   # パスワード認証を禁止
ChallengeResponseAuthentication yes                  # チャレンジレスポンス認証(ワンタイムパスワードとか用)を許可
AuthenticationMethods publickey,keyboard-interactive # 2要素認証として認証キー、チャレンジレスポンスを利用する
----
# vi /etc/pam.d/google-auth
---
#%PAM-1.0
auth        required      pam_env.so
auth        sufficient    pam_google_authenticator.so try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so
----
# vi /etc/pam.d/sshd
---
#%PAM-1.0
auth       required     pam_sepermit.so
#auth       substack     password-auth # コメントアウト
auth       substack     google-auth  # 追加
----
# systemctl restart sshd

ログイン用ユーザーでGoogleAuthenticatorの設定

※SSHでサーバーにログインするユーザーに切り替えておく

$ google-authenticator

QRコードが表示されるので、SmartKey などの対応アプリでQRコードを撮影すれば登録ができる
他にもごちゃごちゃでてくるがyを押していけばOK

※ 最後に非常時用パスワード(6桁)が5つ表示されるのでこれはどこかにメモしておく。アプリが使えなくなった時などの緊急時に利用する。

ログインテスト

※ 新たにSSH接続を試す
※ テストする前にSSHを完全に切ってしまうと、上手くできていなかった場合、SSH接続が一切できなくなってしまうので注意

> ssh -i ~/.ssh/id_rsa LOGIN_USER@HOSTNAME
Verification code:

このVerification code:がでてきたら、アプリに表示されている6桁の数字を入力する。
ログインができたら成功。

感想

自分用のメモとして冗長にはなったが、これで2要素認証ができた。
今回は鍵認証とワンタイムパスワードでやっているが、パスワードとワンタイムパスワードなどの使い方もできる。
Amazon Linuxならyum だけでGoogle Autenticatorがいれられるし、2要素のログインは当たり前とおもったほうがいいんだろうな。