Raspberry PiにSSHで接続する際、チャレンジレスポンス認証(Keyboard Interactive Authentication)を利用したい場合があります。
今回、Raspberry PiへSSH接続するマクロを作成し、チャレンジレスポンス認証を指定して接続したところ、以下のエラーが発生しました。

SSH2自動ログインエラー: ユーザー認証が失敗しました。
サーバでサポートされていない認証方法です。
調査したところ、SSHサーバー側でキーボードインタラクティブ認証(Keyboard Interactive Authentication)が無効になっていました。
この記事では、Raspberry PiのSSHサーバーでチャレンジレスポンス認証を有効にし、実際にマクロからログインできるようにするまでの手順を紹介します。
今回の環境
今回使用した環境は以下です。
- Raspberry Pi
- Debian系OS
- カーネル:
6.12.47-1+rpt1 - SSHサーバー:OpenSSH
- SSHクライアント:Tera Termマクロ
※OSやOpenSSHのバージョンによって、設定項目の名称や初期値が異なる場合があります。
SSHのチャレンジレスポンス認証とは
SSHには複数の認証方式があります。
代表的なものとして、以下があります。
- パスワード認証
- 公開鍵認証
- キーボードインタラクティブ認証
- チャレンジレスポンス認証
OpenSSHでは、現在のバージョンではKbdInteractiveAuthenticationという設定項目で、キーボードインタラクティブ認証を制御します。
今回利用するTera Termマクロでは、
/ssh /auth=challenge
を指定してチャレンジレスポンス認証を使用します。
そのため、SSHサーバー側でキーボードインタラクティブ認証が許可されている必要があります。
SSHチャレンジレスポンス認証を有効にする
現在のSSH設定を確認する
まず、sshd_configの設定を確認します。
cat /etc/ssh/sshd_config
今回の環境では、以下の設定になっていました。
KbdInteractiveAuthentication no
noになっているため、キーボードインタラクティブ認証は無効です。
ここをyesに変更します。
sshd_configを編集する
以下のコマンドでSSHサーバーの設定ファイルを開きます。
sudo nano /etc/ssh/sshd_config
次の設定を探します。
KbdInteractiveAuthentication no
これを以下のように変更します。
KbdInteractiveAuthentication yes
つまり、
-KbdInteractiveAuthentication no
+KbdInteractiveAuthentication yes
とします。
設定項目が存在しない場合
環境によっては、KbdInteractiveAuthenticationの記述がない場合があります。
その場合は、sshd_configの適切な場所に以下を追加します。
KbdInteractiveAuthentication yes
保存してファイルを閉じます。
SSHの設定を確認する
設定を変更したら、SSHサーバーが認識している設定を確認します。
以下を実行します。
sudo sshd -T | grep -i kbdinteractiveauthentication
以下のように表示されれば、設定が有効になっています。
kbdinteractiveauthentication yes
sshd -Tを使うことで、sshd_configをもとにしたSSHサーバーの実効設定を確認できます。
設定変更後に確認しておくと、記述ミスや想定外の設定によるトラブルを防ぎやすくなります。
SSHサーバーの設定を反映する
設定を変更しただけでは、すでに起動しているSSHサーバーに反映されない場合があります。
まず、設定ファイルの構文に問題がないか確認します。
sudo sshd -t
何も表示されなければ、基本的に構文エラーはありません。
問題がなければSSHサービスを再読み込みします。
sudo systemctl reload ssh
環境によってはサービス名がsshdの場合があります。
sudo systemctl reload sshd
Debian系の環境では、sshというサービス名が使われることがあります。
Tera Termマクロから接続する
SSHサーバー側の設定が完了したので、作成していたTera Termマクロから接続します。
今回使用したマクロは以下です。
;========================================
; 接続情報
;========================================
USERNAME = 'XXX'
PASSWORD = 'XXX'
; ===== 機器リスト =====
strdim HOST 1
HOST[0] = 'pi.home'
;========================================
; コマンド生成
;========================================
msg = HOST[0]
strconcat msg ':22 /ssh /auth=challenge /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg PASSWORD
connect msg
/auth=challengeを指定することで、チャレンジレスポンス認証を使用してSSH接続します。
接続先は以下の部分で指定しています。
HOST[0] = 'pi.home'
ここには、Raspberry PiのIPアドレスやホスト名、DNSで名前解決できるドメイン名などを指定できます。
例えばIPアドレスを直接指定する場合は、
HOST[0] = '192.168.1.100'
のようにします。
マクロを実行する
設定変更後、Tera Termマクロを実行してSSH接続を確認します。
今回の環境では、変更前は以下のエラーが発生していました。
SSH2自動ログインエラー: ユーザー認証が失敗しました。
サーバでサポートされていない認証方法です。
KbdInteractiveAuthenticationをyesに変更した後、マクロを再実行したところ、Raspberry Piへ正常にログインできました。
これでSSHのチャレンジレスポンス認証を利用した自動ログインができるようになりました。
まとめ
今回は、Raspberry PiのSSHサーバーでチャレンジレスポンス認証を許可し、Tera TermマクロからSSH接続できるようにしました。
さらに、Tera Termマクロをバッチファイルから呼び出せば、バッチファイルを実行するだけでRaspberry PiへSSH接続することもできます。
Tera Termマクロをバッチファイルから実行する方法については、以下の記事で紹介しています。
