組み込みシステムやネットワーク機器など、極端に計算機資源が限られる環境ではOpenSSHに代わってDropbearというSSH実装が用いられることがある。
よく、OpenSSHを代替するかのように説明されるが、ネットワークプロトコルとしての互換性はともかく、設定方法やコマンドは互換性が無いものも多いことに注意する。 この記事は、そのような互換性が無い挙動について、自分のユースケースの観点から問題になる部分についてメモしている。
Dropbearには設定ファイルが無い
OpenSSHは設定ファイルを用いてSSHクライアント/サーバの挙動を制御できるが、Dropbearには設定ファイルが無い。 Dropbearは全ての挙動をコマンドラインオプションを用いて制御する。
Dropbearでは鍵ペアを生成するコマンドとファイル形式が異なる
秘密鍵のファイルフォーマットの違い
OpenSSHでは普通、ssh-keygenコマンドを使って鍵ペアを生成する。
一方Dropbearではdropbearkeyというコマンドを使って鍵ペアを生成する。
更に重要なのは秘密鍵のファイルフォーマットの互換性がないことだ。
この違いは単純にファイルを標準出力するだけでも確認できる。
OpenSSHの秘密鍵は次のような形式になっているが
-----BEGIN OPENSSH PRIVATE KEY----- BASE64エンコードされているバイナリ -----END OPENSSH PRIVATE KEY-----
Dropbearの秘密鍵は次のような形式になっている。
ssh-${アルゴリズム}@${文字化けするような生のバイナリ列}
だからssh-keygenコマンドで生成された秘密鍵のファイルをそのままDropbearで使うことはできないだろう。
dropbearkeyコマンドを用いてDropbearが認識できる秘密鍵を生成する
dropbearkeyを用いてed25519鍵ペアを生成するには次のようにすれば良い。
# ed25519アルゴリズムで秘密鍵を~/.ssh/id_dropbear、公開鍵を~/.ssh/id_dropbear.pubとして鍵ペアを生成する dropbearkey -t ed25519 -f ~/.ssh/id_dropbear
ssh-keygenと異なり、-fオプションを用いて明示的に秘密鍵のファイル名を指定する必要があることに注意する。
また、そのファイルパスは同コマンドのヘルプテキストに書かれているように、特別な理由がないなら次のパスを指定することが望ましい。
~/.ssh/id_dropbear
-f filename Use filename for the secret key. ~/.ssh/id_dropbear is recommended for client keys.