Как я заставляю dropbear на самом деле работать с initramfs?

Я пытаюсь разблокировать бездисплейный сервер, выполняющий зашифрованную версию Ubuntu 14.04. Это - чистые 14.04.2 установки со всеми обновлениями на момент написания этих строк.

Я пошел thtrough стандартные интриги с dropbear и busybox, т.е.:

# 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' \ 
         root@192.168.0.11                                     # on client

Таким образом, я скопировал автоматически сгенерированный ssh-ключ и реализовал минимальную конфигурацию dropbear. К моему удивлению два три вещи неправильно функционируют:

  1. Система игнорирует настройки IP. Я нашел в сайте "подключенных устройств" своего маршрутизатора, что сервер имеет IP 192.168.0.27 несмотря на мою конфигурацию. Таким образом, я попробовал перечисленный неправильный IP: ssh -vv -i ~/.ssh/dropbear_dss_host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' root@192.168.0.27. Это соединяется с dropbear, но:
  2. Dropbear игнорирует все открытые ключи кроме своего собственного в /etc/initramfs-tools/root/.ssh/authorized_keys (протестированный с dss - возможно, также rsa).
    Решенный: Dropbear хочет пароль для ключа, который я не имею. Таким образом, я попробовал пустой пароль. С которым dropbear спадает до аутентификации по паролю и хочет пароль root, который не установлен.
  3. Пользовательские сценарии рычага, кажется, частично проигнорированы. Это сценарии, которые работали в более старой установке!

Вот целая ssh сессия.

Я добавил свой обычный файл с открытым ключом к известным хостам dropbear в сервере /etc/initramfs-tools/root/.ssh/authorized_keys и попробованный к 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. Но это не работало также.

Я теперь полностью раздражаюсь и в конце моего терпения. Где я шел не так, как надо? Кроме того, синтаксис для права настроек IP, потому что в одном руководстве говорится ::eth0:off и следующее говорит ::etho:none?

Править

Существует кто-то с тем, что, кажется, та же проблема на 15,04.

Редактирование 2

Я могу теперь соединиться с сервером. Оказывается, я скопировал неправильный закрытый ключ для использования с dropbear. Ошибка была исправлена в моем сценарии выше. Но добавление ключей все еще не работает (т.е. к dropbear's authorized_keys файл). Существует слово, необходимо преобразовать открытые ключи, к которым Вы хотите добавить /etc/initramfs-tools/root/.ssh/authorized_keys к формату dropbear, но я не хочу проводить время, ища как. Я только попробовал dss открытые ключи. Возможно, dropbear просто нравится rsa лучше?

Также я заметил, что пользовательские сценарии рычага, кажется, не работают. Они не включены в каталоги initramf, но 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 программа должна преобразовать ключи. Параметр ФОРМАТА может быть также openssh или dropbear. Но не кажется, что это - ответ о том, как добавить ключи к серверам /etc/initramfs-tools/root/.ssh/authorized_keys. Существующий ключ там уже находится в формате файла openssh с открытым ключом. Так добавление других ключей openssh-формата не должно быть проблемой. Все же это.

6
задан 21 May 2017 в 13:18

4 ответа

Вот , как Вы преобразовываете ключ dropbear. Сценарии запуска являются небольшим wonky для меня также...

2
ответ дан 23 November 2019 в 08:00

Хорошо все, так на всякий случай Вы не нашли решение и ни для кого больше, кто вытягивает их волосы после учебных руководств онлайн для подъема этого и выполнения...

Все учебные руководства, которые я нашел онлайн, говорят/подразумевают, что файл

authorized_keys

входит

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

, когда на самом деле он, как предполагается, входит

/etc/dropbear-initramfs/

+1 @ceremcem для того, чтобы также показать это.

0
ответ дан 23 November 2019 в 08:00

Это неясно, какие known_hosts беспокоят Вас - на сервере или на клиенте. Я использовал инструкции по http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ на Debian. Я собираюсь перефразировать ту страницу и добавить некоторую тонкую настройку, которую я нашел полезным. Современные пакеты Dropbox 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. Stil на сервере, войдите в корень, и извлечение из Dropbear адресует общедоступную часть файлу, где начальная загрузка dropbear ищет его:

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

  4. Обновление initramfs:

    обновите-initramfs-u-k все

  5. Очистка: удалите bootkey_dropbear_rsa и bootkey_rsa с сервера.

Обратите внимание, что местоположение, где known_hosts ожидается обновлением-initramfs, данным выше как /etc/dropbear-initramfs/authorized_keys , гибко, и вероятно изменяется от дистрибутива до дистрибутива. Чтобы быть уверенными, Вы кладете его на правильное место, читаете исходный файл из /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" root@my.server.ip.addr \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"

Один из ключей, id_rsa.initramfs, файл /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key или bootkey_rsa от раздела сервера.

На клиенте known_hosts, может быть конфликт между ключом, который Вы уже имеете для сервера OpenSSH и dropbear сервера, который Вы просто установили. Я временно удалил из known_hosts ключи для регулярных услуг OpenSSH, соединенное использование команды выше (игнорирование -o параметр), был запрошен, если я доверяю ключу хоста, сказал и добавили его к моему known hosts. Оттуда на, необходимо переместить ту последнюю строку в ее собственный known_hosts (~/.ssh/known_hosts.initramfs в примере выше).

2
ответ дан 23 November 2019 в 08:00

Загрузите свой СЕРВЕР путем соединения и разблокирования зашифрованного раздела через КЛИЕНТ

Установите обязательные пакеты (на СЕРВЕРЕ)

apt-get install dropbear initramfs-tools busybox

Добавьте свои желаемые открытые ключи в authorized_keys файл СЕРВЕРА

Просто скопируйте и вставьте свой открытый ключ (ключи) в /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

Отключите dropbear сервис на начальной загрузке, таким образом, openssh используется после того, как раздел дешифрован

sudo update-rc.d dropbear disable

Тестирование

  1. Перезагрузите свой сервер
  2. Соединитесь со своим сервером через ssh root@192.168.1.254 [-i ~/.ssh/id_rsa]
0
ответ дан 23 November 2019 в 08:00

Другие вопросы по тегам:

Похожие вопросы: