opensshの暗号アルゴリズムを確認するには、結局デバッグモードが一番という話
ファイル転送にもセキュアな接続が求められることが多い昨今、特にunix系のOSでよく使用されるフリーのソフトがopensshである。
ssh接続を行う際にまずkexやcipher等と呼ばれる暗号アルゴリズムについてクライアント・サーバ側でそれぞれ対応している一覧を提示しあい、双方で一致しているアルゴリズムの中で最もセキュアなものが選択される。
もし一致するアルゴリズムがない場合は、下記のようなエラーが発生し接続ができない。(つまり簡単にいうとサーバ同士の相性のようなものだ)
接続テストを実施するのはプロジェクトがある程度進んでからだったりすることもあり、事前に対応している暗号アルゴリズムを確認しておきリスクヘッジする必要があるのだ。
ぱっと思い当たるのはsshコマンドのQオプションであるが、このQオプションはあくまで対応可能な暗号アルゴリズムの一覧であり実際の有効/無効とは関係がないのである。
次に思いつくのは、/etc/ssh/ssh_config(サーバ側はsshd_config)の設定を確認するという方法であるが、デフォルトでは設定がコメントアウトされており、そのままの設定を利用しているユーザも多いのではないか。つまりこの確認でも要件を満たさない。
※設定をコメントアウトしている場合は、opensshのソースコード内でデフォルト値を定義しているため、ソースをいちいち読み解かないといけない。
仮にssh_configで設定している場合も、例えばRHEL8以上のバージョンを利用している場合は/etc/crypto-policies/back-endsに暗号化ポリシーを設定でき、暗号化ポリシーの設定が優先されてしまうので誤った判断を起こしやすい。
また、まれにopenssl ciphers -Vなどによりopensslの暗号アルゴリズムの抽出をもって確認ができたことにする人がいるが、opensshはopensslのcryptoのライブラリを確かに参照はしているがどの暗号アルゴリズムを使うかはあくまでopenssh側で定義しており、同一ではないので注意してほしい。
つまり、結局のところ一発で確認する手法はなく、sftpコマンドの-vvオプション(3段階までvをつけることが可能)などで実際に提示されている一覧を抽出するのがベストなのである。