SSHでワンタイムパスワード(OTP)を導入|セキュリティ強化
本ブログ内のSSHに関するまとめ記事を書いたので、こちらもご覧ください。
今回は、SSHのセキュリティを強化のため、公開鍵認証に加えてワンタイムパスワード(OTP)を導入する方法について解説します。また、OTPの生成には「Google Authenticator」を使用します。
公開鍵認証については以下の記事で解説してます。
SSHは便利である一方、セキュリティ面でのリスクも存在します。特に、外部からのサーバー乗っ取りなどの危険が伴う可能性があります。しかし、ワンタイムパスワード(OTP)を導入することで、不正アクセスのリスクを大幅に低減することができます。
設定方法
今回導入するサーバ情報は以下です。
<SSH接続先サーバ情報>
サーバ:ConoHa VPS
OS:Ubuntu22.04
その他設定:SSHの公開鍵認証を設定済み。
導入の流れは以下となります。
Google Play StoreやApp Storeにあります。
SSH接続するサーバ側にパッケージをインストールします。
SSH接続するサーバ側の設定ファイルを変更してOTPを有効化します。
STEP2〜STEP3での設定内容を端末アプリと紐づけます。
OTPを使ってSSH接続できるかを確認します。
STEP1は省略して、STEP2から解説をしていきます。
PAMモジュールのインストール
まずは、Google Authenticator のワンタイムパスワード(OTP)を利用するためのPAM(Pluggable Authentication Module)モジュールをインストールします。
OTPを利用するための部品だと思ってもらえればOKです。
sudo apt update #パッケージリストを最新化
sudo apt-get install libpam-google-authenticator #パッケージをインストール
SSH設定の変更
まずはsshd_configを管理者権限で変更をします。ちなみに似たようなssh_confgファイルがありますがそちらは更新しません。
sshd_config
: サーバー側のSSHを制御する。
ssh_config
: クライアント側のSSUを制御する。
sudo vi /etc/ssh/sshd_config
ファイルを開いたら以下の項目を追加してください。
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthenticationはOTP認証を有効にするもので、AuthenticationMethodsは公開鍵認証(publickey)に加えて、OTP認証(keyboard-interactive)の追加認証が可能となります。
次にsshdファイルも同様に管理者権限で変更をします。
sudo vi /etc/pam.d/sshd
ファイルを開いたら以下の項目を追加してください。
auth required pam_google_authenticator.so
これでログインの際にGoogle AuthenticatorによるOTP認証を要求することができます。
sshdのサービスを再起動します。
sudo systemctl restart sshd
これでSSH接続先サーバの設定は完了です。
Google Authenticatorアプリの設定
Google Authenticatorアプリの設定をします。以下のコマンドを打ってください。
google-authenticator
端末にQRコードリーダがある場合はQRコードを読み取ります。ない場合は下の方にあるsecret keyを入力します。
端末にこんな感じ追加されてればOKです。
動作確認
正しくOTPが機能しているかを確認するため、設定をしたサーバに対してSSHしてみます。
パスワードの次にVerification codeでOTPが要求されているのがわかります。
OTPをOFFにしたい場合
以下のようにsshd_configを変更すると、通常通りの公開鍵認証のみとなります。
ChallengeResponseAuthentication yes
#AuthenticationMethods publickey,keyboard-interactive #コメントアウト(消しても大丈夫です)
AuthenticationMethods publickey #publickeyのみにする
今回は以上となります。