# DebianでWOLとDropbearを組み合わせて起動する方法 subtitle : 暗号化LVMだがパスフレーズ省略までは頑張らない author : Kentaro Hayashi institution : ClearCode Inc. content-source : OSC 2021 Online/Nagoya Lightning Talks allotted-time : 5m theme : . # スライドは公開済みです * DebianでWOLとDropbearを組み合わせて起動する方法 * # プロフィール ![](images/profile.png){:relative-height="60" align="right"} * ひよこDebian Developer @kenhys * トラックポイント(ソフトドーム派) * わさビーフ(わさっち派) # 本日の内容 * リモートから比較的簡単に\\nDebianマシン(Bullseye)を起動する事例紹介 {::comment} まだリリースされていない {:/comment} # なぜリモートから起動したいか * COVID-19前 * たまに在宅勤務するときは社内チャット(Zulip)で\\n電源を入れてもらうようお願いする\\nのどかな光景😊 * COVID-19後 * 在宅勤務のためオフィスにお願いできる人がいるとは限らない🤔 # 前提条件 * 社内ネットワークにSSH Gatewayを経由して入れる環境あり * リモート起動したいマシンには**社内の固定IP**がふられている * 対象マシンのディスクの**暗号化LVMは有効**にしておきたい * パスフレーズの入力の省略までは頑張らなくていい # 解決策 * 電源投入はWake on LANで実施 * 暗号化LVMパスフレーズはSSH経由で入力する * Dropbearを設定しておく * ホスト鍵のfingerprint不一致への対策 * DropbearとOpenSSHのホストの鍵を揃える # Wake on LANで電源投入 * 対象のマシンにマジックパケットを投げつける * 社内の他のマシンにwakeonlanがインストールされている必要あり ```sh $ sudo apt install -y wakeonlan $ wakeonlan (対象のMACアドレス) ``` # 暗号化LVMのパスフレーズ入力 * Dropbearのインストール * SSHの公開鍵を設定 * GRUBの設定 * ホスト鍵を揃える * initramfsの更新 # Dropbearのインストール * Dropbearとは * * リソースの制約のきびしい組み込み機器向けSSHサーバー ```sh $ sudo apt install -y dropbear busybox ``` # SSHの公開鍵を設定 * /etc/dropbear-initramfs/authorized_keys * sshで~/.ssh/authorized_keysを置くのと一緒 # GRUBの設定 ```sh GRUB_CMDLINE_LINUX="ip=(固定IP)::192.168.10.1:255.255.255.0::eno1:none" ``` * /etc/default/grub を書き換える * インタフェース名(eno1)等は適宜読み替えて設定する * sudo update-grubで更新する # DropbearとOpenSSHのホストの鍵を揃える * 初期設定ではDropbearとOpenSSHそれぞれでホストの鍵を生成する * 同一IPでホスト鍵が変わるとssh接続時にエラーになるので面倒 ```sh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ``` * dropbearconvertで鍵を変換できる # 変換対象の鍵 * /etc/ssh/ssh_host_ecdsa_key * /etc/dropbear-initramfs/dropbear_ecdsa_host_key * /etc/ssh/ssh_host_ed25519_key * /etc/dropbear-initramfs/dropbear_ed25519_host_key * /etc/ssh/ssh_host_rsa_key * /etc/dropbear-initramfs/dropbear_rsa_host_key # dropbearconvertの注意(Bullseye) * dropbear 2020.81-3 で openssh 8.4p1-5の場合 ```sh $ sudo dropbearconvert openssh dropbear \ /etc/ssh/ssh_host_ecdsa_key \ /etc/dropbear-initramfs/dropbear_ecdsa_host_key Error: Unsupported OpenSSH key type Error reading key from '/etc/ssh/ssh_host_ecdsa_key' ``` # あつかえる形式に前処理する * ssh-keygen -mを指定してPEM形式に変換する ```sh $ cp /etc/ssh/ssh_host_ecdsa_key /tmp $ ssh-keygen -p -m PEM -f /tmp/ssh_host_ecdsa_key ``` # 前処理した鍵を変換する ```sh $ sudo dropbearconvert openssh dropbear \ /tmp/ssh_host_ecdsa_key \ /etc/dropbear-initramfs/dropbear_ecdsa_host_key $ sudo dropbearconvert openssh dropbear \ /tmp/ssh_host_ed25519_key \ /etc/dropbear-initramfs/dropbear_ed25519_host_key $ sudo dropbearconvert openssh dropbear \ /tmp/ssh_host_rsa_key \ /etc/dropbear-initramfs/dropbear_rsa_host_key ``` # initramfsを更新する ```sh $ sudo update-initramfs -u ``` # Wake on LANで起動する ```sh $ wakeonlan (MACアドレス) Sending magic packet to 255.255.255.255:9 with (MACアドレス) ``` # SSHで暗号化LVMのパスワードを解除 * 暗号化LVMのパスフレーズを入力するとsshが切れて通常起動する ```ssh % ssh radiant-rboot To unlock root partition, and maybe others like swap, run `cryptroot-unlock`. BusyBox v1.30.1 (Debian 1:1.30.1-6+b1) built-in shell (ash) Enter 'help' for a list of built-in commands. ~ # cryptroot-unlock Please unlock disk nvme0n1p3_crypt: cryptsetup: nvme0n1p3_crypt set up successfully ~ # Connection to 192.168.10.109 closed by remote host. Connection to 192.168.10.109 closed. ``` # まとめ * Wake on LANとDropbearでリモートからの起動を実現できる * 起動時のパスフレーズ入力は許容できるならお手軽 * OpenSSHとDropbearの鍵は統一しておくと便利