生成された crypttab ユニットの前に systemd が ssh.service を開始するようにする方法

生成された crypttab ユニットの前に systemd が ssh.service を開始するようにする方法

私はDebian Busterを実行しているサーバーを持っていますが、そのルートファイルシステムはない暗号化されていますが、他のドライブは暗号化されています。
[到着予定時刻:すべての OS システム ディレクトリ ( /var、、/homeなど/etc) は、暗号化されていないルート パーティションにあります。スワップは暗号化されていますが、起動のたびに新しいランダム キーを使用して非対話的に作成されるため、その待機によって何も停止することはありません。]
暗号化された「ストレージ」ドライブを復号化してマウントするためのエントリが /etc/crypttab と /etc/fstab にあり、ブート プロセスは、他のドライブを復号化するキー ファイルを保持する小さな暗号化パーティションへのパスフレーズを無期限に待機します。ここまでは順調です。物理的に接続されたモニターにパスフレーズ プロンプトが表示され、物理的に接続されたキーボードでパスフレーズを入力すると、ブートが続行されます。OpenSSH デーモンがインストールされており、起動後は公開キー認証を使用してサーバーに接続し、あらゆる種類の管理を行います。

今、私はSSH経由でLUKSデバイスをリモートでロック解除できるようにしたい。ルートはない暗号化されたファイルシステムの 1 つであるため、「initramfs 内の dropbear+busybox」という作業全体は必要ないと思います。これは比較的簡単だと思いました。
sudo systemctl edit ssh.service次の行を追加します。

[Unit]
Before=cryptsetup-pre.target
[Install]
WantedBy=cryptsetup-pre.target

WantedByこれにより、systemd はローカル ディスクの復号化を開始する前に sshd を起動するように設定を切り替えることになります。(ではなく を選択したのはRequiredBy、 sshd が期待どおりに起動しない場合に systemd が cryptsetup を「失敗」させないようにするためです。)

sudo systemctl daemon-reload何もエラーは出ず、cat /etc/systemd/system/ssh.service.d/override.conf予想どおりに 4 行が表示されます。再起動すると、パスフレーズ プロンプトが表示されます (予想どおり) が、サーバーに ssh で接続しようとするとすべて が返されるためNo route to host、ssh.service が最初に起動しなかったことは明らかです。

オーバーライドを変更して、sshがWantedByで、systemdが生成した[email protected]ユニットの前に来るように指定してみました。興味深いことに、この結果sshは発生しませんでした。そしてパスフレーズプロンプトがないので、起動が永遠に停止してしまい、リカバリメディアから起動してオーバーライドを削除する必要がありました。これはあまり役に立ちませんが、少なくとも目に見える効果がありました。どこかで循環依存関係を作ってしまったのでしょうか? パスフレーズプロンプトは、本当にブートシーケンスの初期段階で。

ここでの次のステップは何ですか? systemd が生成した cryptsetup ユニットをオーバーライドしてWants=After=にリンクを渡すことssh.serviceは可能ですか? 可能であれば、より良い結果が得られると考える理由はありますか? そのキーストア パーティション用に /etc/ の下に独自のユニットを記述し、対応する inittab および fstab エントリを削除するのは理にかなっていますか? つまり、これを機能させるのに少しでもまともな方法はあるのでしょうか、それともこの手段をあきらめて、結局 initramfs で dropbear+busybox を使用するべきでしょうか?

PS. 暗号化されたドライブを「noauto」にすることも考えましたが、それらのディスク上の VM はブート プロセスの後半で自動起動するように構成されているため、リモート ロック解除が機能するようにしたいです。

答え1

cryptsetup.targetまたはを使用してもcryptsetup-pre.target機能しませんでしたが、その理由はわかりません。

以下のオーバーレイを作成することができました[email protected]:

# /etc/systemd/system/[email protected]/myservice.conf
[Unit]
Wants=myservice.service
After=myservice.service

関連情報