OPNsense SSHd: Unable to negotiate a key exchange method

OPNsense ルーターアプライアンスのOSを25.1系から25.7系に更新することにしました。
本当は更新したくないのですけどねぇ~。放置しすぎるといろいろ問題が出て来るので、約半年ぶりに更新しました。

OPNsense は FreeBSD をベースにしたルーターアプライアンスで、前回OPNsense にSSHでアクセスしようとしたところ、「no hostkey alg」で拒絶されたことをメモしました。

今回は、

% ssh opnsense
Unable to negotiate a key exchange method

Snow Leopard の ssh から OPNsense 25.7.9 に接続しようとすると、このエラーでログインできない。

検索してみると、no hostkey alg 同様、OPNsense の暗号化通信が古いプロトコルを拒絶しているために起きているそうです。前回は hostkey アルゴリズムでしたが、今回は key exchange method のアルゴリズム。

OPNsense コントロールパネル「System: Settings: Administration」から Secure Shell の項目に以下があります。

これが、System defaults になっていますが、その値が不明。

sshd Unable to negotiate a key exchange method

明示的に、古いアルゴリズム「diffie-hellman-group1-sha1」を選択すれば回避できるようです。

sshd Unable to negotiate a key exchange method

最低1個の弱いアルゴリズムを選択しておけば大丈夫のようですけど(おそらく sha1であればOKのもよう)、複数選択できるので、上から5,6個選択しておきました。自宅内のssh接続なので弱い暗号化でも問題ありませんが、オフィスで使う場合は、より強力なアルゴリズムも使う方が安心できそうです。

FreeBSD13.5 サーバーからOPNsense へSSH接続する時は、OPNsenseのシステムデフォルトで問題ありませんでした。古いOSのSSHコマンドを使う場合が問題になります。

OPNsenseの更新を半年行わないと、その間10回くらい更新が行われていて、OPNsenseの場合、メジャーバージョンへのアップデートは一気には行えないので、私のStickパソコン環境では、このsshd 問題も絡み約2時間掛かりました。

接続先がOPNsenseの場合、key exchange method を変更するにはコントロールパネルのGUIから行えるため簡単に設定できましたが、素のFreeBSDの場合はそうはいかない。OPNsense の /usr/local/etc/ssh/sshd_config を見てみると、KexAlgorithms に続けて、

KexAlgorithms diffie-hellman-group1-sha1, . . . . .

と、使うアルゴリズムをカンマで区切って記述して行けば良いようです。

コメントを残す