web-dev-qa-db-ja.com

ドロップベアを実際にinitramfsで動作させるにはどうすればよいですか?

Ubuntu 14.04の暗号化バージョンを実行しているヘッドレスサーバーのロックを解除しようとしています。これは、執筆時点でのすべての更新を含むクリーンな14.04.2インストールです。

私はdropbearbusyboxを使用して標準のシェナンガンを試しました。

# INSTALL
Sudo apt-get install dropbear busybox           # on server

# ENABLE AND CONFIGURE IP
Sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropber
Sudo sed -i 's/BUSYBOX=y/BUSYBOX=y\nDROPBEAR=y\n/g' \
            /etc/iniramfs/iniramfs.conf
Sudo sed -i 's/DEVICE=.+/DEVICE=etho0/g' \
             /etc/iniramfs/initramfs.conf
Sudo sed -i 's/IP=.+/IP=IP=192.168.0.11:::255.255.255.0::eth1:off' \
            /etc/initramfs/initramfs.conf
Sudo update-initramfs

# COPY DROPBEAR SSH KEY
# WRONG: Sudo cp /etc/dropbear/dropbear_*_Host_key /tmp
Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa /tmp             # BETTER!
Sudo chown $USER:$USER /tmp/id_rsa

scp server:/tmp/id_rsa ~/.ssh/id_rsa_dropbear_server           # on client

Sudo reboot                                                    # on server

# CONNECT TO SERVER
ssh -vv -i ~/.ssh/id_rsa_dropbear_server \
        -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' \ 
         [email protected]                                     # on client

そこで、自動生成されたssh-keyをコピーし、dropbearの最小限の設定を行いました。驚いたことに  次の3つのことが誤動作しています。

  1. システムはIP設定を無視します。ルーターの「接続されたデバイス」サイトで、サーバーが設定にかかわらずip 192.168.0.27を持っていることがわかりました。それで、リストされた間違ったIPをssh -vv -i ~/.ssh/dropbear_dss_Host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected]で試しました。それはdropbearに接続しますが:
  2. Dropbearは、/etc/initramfs-tools/root/.ssh/authorized_keys(dssでテスト済み-たぶんrsaでも)で、それ以外のすべての公開鍵を無視します。
    解決済み: Dropbearはキーのパスフレーズが欲しいのですが、私には持っていません。そこで、空のパスフレーズを試しました。 dropbearがパスワード認証にドロップし、rootパスワードが必要な場合、それは設定されません。
  3. カスタムフックスクリプト sは部分的に無視されるようです。これらは、古いインストールで機能したスクリプトです!

これが sshセッション 全体です。

サーバーの/etc/initramfs-tools/root/.ssh/authorized_keysにあるdropbearの既知のホストに通常の公開キーファイルを追加し、通常のキーでsshを試みました。それはうまくいきませんでした。

GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"をサーバーの/etc/default/grupに追加し、grupを更新しました。これはIPの問題を修正するためのものでした。しかし、それもうまくいきませんでした。

私は今完全にイライラし、私の忍耐の終わりにいます。どこで私は間違えましたか?また、あるガイドでは::eth0:offと書かれており、次のガイドでは::etho:noneと書かれているため、IP設定の構文は正しいですか?

編集

15.04に 同じ問題 のように見える人がいます。

編集2

これでサーバーに接続できます。結局、私はdropbearで使用するために間違った秘密鍵をコピーしていました。上記のスクリプトでエラーが修正されました。ただし、キーの追加はまだ機能しません(つまり、dropbearのauthorized_keysファイル)。 /etc/initramfs-tools/root/.ssh/authorized_keysにdropbearの形式に追加する公開鍵を変換する必要があるWordがありますが、どのように検索するのに時間を費やしたくありません。 dss公開鍵のみを試しました。おそらくdropbearはrsaの方が好きですか?

また、カスタムフックスクリプトが機能しないように見えることに気付きました。それらはinitramfsのディレクトリには含まれていませんが、lsinitramfs -l /boot/initrd.img-3.16.0-43-genericはイメージの一部としてそれらをリストします。 IP設定も同様に無視されます。 GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"のgrubconfigに/etc/default/grubを追加し、すべてを更新しても。

編集3

したがって、/usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILEはキーを変換するプログラムのようです。 FORMATパラメーターは、opensshまたはdropbearのいずれかです。しかし、サーバーにキーを追加する方法についての答えは/etc/initramfs-tools/root/.ssh/authorized_keysではないようです。そこにある既存のキーは、opensshの公開キーファイル形式です。そのため、他のopenssh形式のキーを追加しても問題はありません。まだです。

6
con-f-use

サーバー上またはクライアント上で、どのknown_hostsがあなたを悩ませているかは不明です。 Debianの http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ の手順を使用しました。そのページを言い換え、役に立つと思われる調整を追加します。現代のDebianドロップボックスパッケージは、インストール時にサーバー上で必要なすべてのキーを作成しますが、参照されているチュートリアルは古く、キーを手動で作成する必要がある場合について言及しています。 YMMV。

A.サーバー上。正しく述べたように、dropbearキーとOpenSSHキーは異なりますが、相互変換可能と思われます。チュートリアルでは、次のようにサーバー上にホストキーを作成できると述べています。

dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key

実際、それよりも少し難しいです。 Debian Jessieでの手順は次のとおりです。

  1. OpenSSHキーを作成します。

    ssh-keygen -t rsa -b 4096 -m PEM -f bootkey_rsa

  2. サーバー、つまりdropbearconvertを使用する可能性が高いコンピューターにコピーします。そこで、それをdropbear形式に変換します。

    / usr/lib/dropbear/dropbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa

  3. サーバーで、rootにログインし、Dropbearキーからパブリック部分をboot dropbearが検索するファイルに抽出します。

    dropbearkey -y -f bootkey_dropbear_rsa | grep "^ ssh-rsa">/etc/dropbear-initramfs/authorized_keys

  4. Initramfsを更新します。

    update-initramfs -u -k all

  5. クリーンアップ:サーバーからbootkey_dropbear_rsaとbootkey_rsaを削除します。

/etc/dropbear-initramfs/authorized_keysとして上記で指定されたupdate-initramfsによってknown_hostsが予期される場所は柔軟であり、おそらくディストリビューションからディストリビューションに変更されることに注意してください。正しい場所に確実に配置するには、/usr/share/initramfs-tools/hooks/dropbearからソースファイルを読み取ります。

他の必要なキーは次のもので作成されます:

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

B.クライアントには両方の種類のキーが必要なので、別のknown_hostsがあります。参照されたチュートリアルでは、接続するコマンドは次のとおりです。

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"

キーの1つであるid_rsa.initramfsは、サーバーセクションの/etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_keyまたはbootkey_rsaファイルです。

クライアントknown_hostsで、OpenSSHサーバー用にすでに持っているキーと、インストールしたばかりのdropbearサーバーとの間に競合がある可能性があります。上記のコマンドを使用して接続された(known_hostsパラメーターを除外して)通常のOpenSSHサービスのキーを-oから一時的に削除し、ホストキーを信頼するとプロンプトが表示され、はい、それを取得しましたknown hostsに追加されました。そこから、最後の行を既知のホスト(上記の例では~/.ssh/known_hosts.initramfs)に移動する必要があります。

2
Nick Alexander

こちら dropbearのキーを変換する方法。起動スクリプトは私にとっても少し不安定です...

2
billy_ran_away

クライアント経由で暗号化されたパーティションを接続およびロック解除して、サーバーを起動します

必須パッケージをインストールする(サーバー上)

apt-get install dropbear initramfs-tools busybox

希望する公開鍵をサーバーのauthorized_keysファイルに追加します

公開鍵をコピーしてSERVERの/etc/dropbear-initramfs/authorized_keysに貼り付けるだけです

ロック解除スクリプトを作成する

/etc/initramfs-tools/hooks/crypt_unlock.shに次のスクリプトを作成します

#!/bin/sh

PREREQ="dropbear"

prereqs() {
  echo "$PREREQ"
}

case "$1" in
  prereqs)
    prereqs
    exit 0
  ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF

  chmod 755 "${DESTDIR}/bin/unlock"

  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF

  chmod 755 "${DESTDIR}/lib/unlock/plymouth"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

実行可能にする:

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

静的IPを作成します(またはこのステップをスキップしてDHCPを使用します)

/etc/initramfs-tools/initramfs.confを編集して、行を追加(または変更)します。

IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]

([hostname] can be omitted)

Initialramfsを更新する

update-initramfs -u

パーティションの復号化後にopensshが使用されるように、起動時にdropbearサービスを無効にします

Sudo update-rc.d dropbear disable

テスト中

  1. サーバーを再起動します
  2. ssh [email protected] [-i ~/.ssh/id_rsa]経由でサーバーに接続します
0
ceremcem

皆さん、解決策が見つからなかった場合や、オンラインチュートリアルに従ってこれを実行するために髪を引っ張っている人のために...

私がオンラインで見つけたすべてのチュートリアルは、そのファイルが

authorized_keys

入る

/etc/initramfs-tools/root/.ssh/

実際にそれが入ってくることになっているとき

/etc/dropbear-initramfs/

これも表示するために@ceremcem +1。

0
J-a-n-u-s