SSH для дешифрования зашифрованного LVM во время бездисплейной начальной загрузки сервера?

"F" ключ при выполнении less сделает "следование" подобным tail -f, но я не уверен, достигнет ли это того, что Вы ищете здесь.

60
20.12.2010, 16:18
10 ответов

Для более новых версий Ubuntu, например, 14.04, я обнаружил комбинацию @dragly и этих блогпостов « отвечает очень полезно. Перефразировать:

  1. (на сервере) Установите Dropbear

     Sudo APT-Get Установить Dropbear
     
  2. (на сервере) Копирование и назначение разрешений для корневого общего / закрытого ключа Вход

     Sudo CP /etc/initramfs-tools/root/.ssh/id_rsa ~ /.
    Пользователь Sudo Chown: User ~ / id_rsa
     

Не забудьте изменить User к вашему имени пользователя на сервере

  1. (на клиенте) Petch Plouch Cale с сервера

     SCP (Hidden) ~ / .ssh / id_rsa_dropbear
     
  2. (на клиенте) добавьте запись на SSH Config

     Host Parkia
      Имя хоста 192.168.11.111.
      Пользовательский корень
      Userknownhostsfile ~ / .ssh / come_hosts.initramfs
      Идентификатор ~ / .ssh / id_rsa_dropbear
    Не забудьте изменить _parkia_ к тому, что вы хотите набрать «SSH My-Box».
     
  3. (на сервере) Создать в этом файле в в /etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (на сервере) Сделать файл исполняемый файл

     Sudo Chmod + X  /etc/initramfs-tools/hooks/crypt_unlock.sh.
     
  5. Обновить initramfs

     Sudo Update-initramfs -U
     
  6. Отключить Spropbear Service на Boot, поэтому OpenSSH используется после дешифрования раздела

     Sudo Update-rc.d dropbear
     

Вы закончите. Попробуй это. Проверьте сообщение в блоге, связанном выше для получения инструкций о том, как настроить сервер со статическим IP-адресом, если это то, что вам нужно сделать.

25
27.01.2020, 19:32

Я думаю, рано-ssh обеспечивает то, что Вы ищете:

Early-ssh is a simple initramfs hook, which installs Dropbear SSH server into  
your initramfs, and starts it at boottime, so you will be able to do a lot of  
things remotely over SSH, before your root partition gets mounted, for example:

* unlocking LUKS encrypted crypto devices - 
  even your root can be an encrypted filesystem
* assembling/altering RAID arrays (mdadm)
* checking the root filesystem in read-write mode, 
  taking action in case of errors
* and so on...

Уже существует .deb доступный пакет, таким образом, Вы соглашаетесь, вероятно, с Ubuntu.

18
27.01.2020, 19:32
  • 1
    Похож это точно, что я ищу, Спасибо! –  hpy 23.12.2010, 01:36
  • 2
    У Вас есть ссылка на хорошее учебное руководство или практическое руководство? Я застреваю с рано-ssh на моем debian, сжимают поле. –   14.03.2011, 13:31
  • 3
    Да учебное руководство было бы большим. –  hpy 29.04.2011, 17:09
  • 4
    roosbertl.blogspot.de/2012/12 / … –  a coder 24.06.2015, 18:25

Если Вы хотите смочь загрузиться необслуживаемый, а также удаленно, необходимо также посмотреть на Mandos (который я и другие записали):

Mandos является системой для разрешения серверов с зашифрованными корневыми файловыми системами перезагрузить необслуживаемый и/или удаленно. Посмотрите вводный файл страницы руководства для получения дополнительной информации, включая список FAQ.

Короче говоря, сервер начальной загрузки получает пароль по сети безопасным способом. Посмотрите README для деталей.

6
27.01.2020, 19:32
  • 1
    Спасибо за Ваши вклады, но примечание, что 100% Ваших сообщений, являющихся почти идентичными упоминаниями о Вашем продукте, являются пограничным поведением, и Вы рискуете рассматриваться спамом (я отметил бы Ваши сообщения, если Mandos не был бесплатным программным обеспечением, или у Вас не было истории сообщений non-Mandos на других сайтах). –  Gilles 'SO- stop being evil' 29.04.2011, 00:24
  • 2
    @Gilles: Сделанный теперь. –  Teddy 03.05.2011, 14:54

Бездисплейный сервер? Если это имеет последовательный порт, используйте его.

GRUB может быть настроен для работы по последовательному порту. Ваше ядро может также быть настроено, используют последовательный порт для вывода первоначальных сообщений загрузки, ввода пароля для разблокирования дисков и входа в систему. (Если Ваш сервер поддерживает последовательный BIOS, включите это также. Затем Вы никогда не должны будете подключать монитор к машине вообще).

Всегда хорошая идея иметь "несетевой" способ войти в бездисплейный сервер.

2
27.01.2020, 19:32
  • 1
    Большая точка! Хотя, "несетевые" способы войти в бездисплейный сервер главным образом (только) релевантны, если физическая близость между клиентом/сервером является непосредственной; если я не пропускаю некоторую другую возможность/функцию Последовательного соединения. –  ILMostro_7 28.02.2016, 08:53

Руководство, чтобы сделать такую установку с BusyBox и Dropbear показывают в этом сообщении в блоге. рано-ssh не работал на меня и больше по-видимому не нужен.

Я суммировал то, что необходимо сделать в следующем. Для получения дополнительной информации взгляните на сообщение выше:

  1. Установите BusyBox и Dropbear на Вашем сервере

    sudo apt-get install dropbear busybox
    
  2. Обновите свой initramfs на сервере

    sudo update-initramfs -u
    
  3. Скопируйте закрытый ключ, сгенерированный dropbear к Вашей клиентской машине. Вам, вероятно, придется скопировать это в новый dir и изменить владение, чтобы сделать это. На Вашем сервере делают следующее:

    sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
    sudo chown user:user ~/id_rsa
    

    Не забудьте заменять пользователя своим именем пользователя. Логины пароля, кажется, не работают.

  4. Теперь можно передать закрытый ключ с scp путем вызова следования клиента:

    scp user@remote.server:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. Настройте ~ своего клиента/.ssh/config файл для легкого входа в систему. Откройте его с текстовым редактором и добавьте следующее:

    Host myremoteserver
        HostName my.remote.server
        User root
        UserKnownHostsFile ~/.ssh/known_hosts.initramfs
        IdentityFile ~/.ssh/id_rsa_dropbear
    

    Измените Хост того, что Вы любите и HostName к названию Вашего сервера. Позвольте пользователю быть корнем. Это, кажется, единственный принятый пользователь в Dropbear. Сохраните и закройте файл.

  6. Перезапустите свой сервер и ожидайте подсказки пароля. Дайте Dropbear несколько секунд, чтобы обнаружить и настроить его интернет-соединение. Соединитесь со своим сервером со следующей командой на Вашем клиенте:

    ssh myremoteserver # or any name you chose
    
  7. При входе в систему дайте следующую команду на сервере. Посмотрите сообщение в блоге для деталей:

    pid=`ps | grep "/scripts/local-top/cryptroot" | cut -d " " -f 3`
    kill -9 $pid
    sleep 35
    /scripts/local-top/cryptroot
    pid=`ps | grep "/bin/sh" | cut -d " " -f 3`
    kill -9 $pid;
    

    Это займет время (30 секунд), прежде чем Вы доберетесь для ввода пароля. Введите его при запросе.

  8. Закройте соединение путем ввода

    exit
    
  9. Ваш сервер должен был теперь разблокировать свой зашифрованный жесткий диск и начальную загрузку как нормальные.

(Огромное благодаря исходному автору сообщения в блоге!)

23
27.01.2020, 19:32
  • 1
    я не вполне понимаю причины того, чтобы переместиться с закрытыми ключами. Должно быть достаточно скопировать открытый ключ Вас на клиентской машине к серверу как авторизованный ключ для корневого сервера, правильно? –  gertvdijk 02.12.2012, 20:11
  • 2
    я уверен, что возможно создать пару ключей на клиентской машине и только переместить открытый ключ оттуда в сервер, но если бы я вспоминаю правильно, что думаю, был некоторыми проблемами, находящими формат, который принял бы BusyBox. Так многократное использование ключей, которые уже были на сервере, было единственной опцией, я получил работу. –  dragly 04.12.2012, 11:04
  • 3
    Какая-либо идея, что я должен сделать для получения этой работы над Arch Linux? –  Gerharddc 09.02.2014, 08:17
  • 4
    @Gerhman dropbear_initrd_encrypt пакет в АУРЕ для ранней-ssh поддержки на Archlinux. –  Caleb 03.02.2015, 12:27
  • 5
    @Gerhman archwiki: Удаленное разблокирование корня или другого раздела еще не сделало этого, но это выглядит интересным. Должен будет проверить его, :) –  hanetzer 07.03.2015, 22:47

Взгляните на cryptsetup readme для этого в /usr/share/doc/cryptsetup/README.remote.gz (Пакет Ubuntu cryptsetup). Там полное руководство для выполнения этого. Это подобно ответу dragly, но я думаю, что это немного более изящно. (Dropbear отформатировал ключи, передав пароль через FIFO, а не хрупкий сценарий оболочки, и т.д.),

разблокирование rootfs через ssh входит в систему в initramfs

Можно разблокировать rootfs на начальной загрузке от удаленного, с помощью ssh для входа в загружающуюся систему, в то время как это работает со смонтированным initramfs.

Установка

Чтобы удаленное разблокирование работало, следующие пакеты должны быть установлены прежде, чем создать initramfs: dropbear busybox

Файл /etc/initramfs-tools/initramfs.conf содержит параметры конфигурации, используемые при создании initramfs. Это должно содержать BUSYBOX=y (это установлено по умолчанию, когда busybox пакет установлен) иметь busybox, установленный в initramfs, и не должен содержать DROPBEAR=n, который отключил бы установку dropbear к initramfs. Если установлено на DROPBEAR=y, dropbear будет установлен в любом случае; если DROPBEAR не установлен вообще, затем dropbear будет только установлен в случае существующей установки cryptroot.

Ключи хоста, используемые для initramfs, dropbear_dss_host_key и dropbear_rsa_host_key, оба расположились в /etc/initramfs-tools/etc/dropbear/. Если они не будут существовать, когда initramfs будет скомпилирован, они будут созданы автоматически. Следующее является командами для создания их вручную:

dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_host_key
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key

Поскольку initramfs не будет зашифрован, аутентификация с открытым ключом принята. Ключ (ключи), используемый для этого, будет взят от /etc/initramfs-tools/root/.ssh/authorized_keys. Если этот файл не будет существовать, когда initramfs будет скомпилирован, он будет создан и /etc/initramfs-tools/root/.ssh/id_rsa.pub будет добавлен к нему. Если последний файл не будет существовать также, то он будет сгенерирован автоматически - Вы найдете закрытый ключ соответствия, под которым необходимо будет позже войти в систему initramfs /etc/initramfs-tools/root/.ssh/id_rsa (или id_rsa.dropbear в случае, если Вам нужен он в dropbear формате). Следующее является командами, чтобы сделать соответствующие шаги вручную:

Создать ключ (в dropbear формате):

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

Преобразовать ключ от dropbear формата до openssh формата:

/usr/lib/dropbear/dropbearconvert dropbear openssh \
    /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \
    /etc/initramfs-tools/root/.ssh/id_rsa

Извлечь открытый ключ:

dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \
    grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub

Добавить открытый ключ к authorized_keys файлу:

cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys

В случае, если Вы хотите, чтобы некоторый интерфейс получил настроенное использование dhcp, установку DEVICE= в /etc/initramfs-tools/initramfs.conf должно быть достаточным. initramfs должен также соблюдать ip= параметр ядра. В случае, если Вы используете личинку, Вы, вероятно, могли бы хотеть установить ее в /boot/grub/menu.lst, любой в'# kopt='строка или добавленный к определенному'kernel'строка (строки). ip= параметр ядра документируется в Documentation/nfsroot.txt в исходном дереве ядра.

Проблемы

Не забывайте работать update-initramfs когда Вы изменили конфигурацию для создания этого эффективным!

Сбор достаточной энтропии для ssh демона иногда, кажется, проблема. Запуск ssh демона мог бы быть задержан, пока достаточно энтропии не было получено. Это не блокируется для процесса запуска, поэтому когда Вы в консоли, Вы не должны будете ожидать sshd для завершения его запуска.

Разблокирование процедуры

Для разблокирования от удаленного Вы могли сделать что-то вроде этого:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
    -i "~/id_rsa.initramfs" root@initramfshost.example.com \
    "echo -ne \"secret\" >/lib/cryptsetup/passfifo"

Этот пример предполагает, что у Вас есть дополнительное known_hosts файл"~/.ssh/known_hosts.initramfs"который содержит ключ хоста cryptroot системы, что у Вас есть файл"~/id_rsa.initramfs"который содержит авторизованный ключ для cryptroot системы, что имя cryptroot системы"initramfshost.example.com", и что cryptroot пароль"secret"

-- <debian@x.ray.net>, среда, 30 сентября 2009

Благодаря засаде для указания на это мне на другом канале.

16
27.01.2020, 19:32
  • 1
    Это походит на намного лучшую идею (описываемый в официальных документах и всем), чем hackish ps-grepping. Как примечание стороны по процедуре разблокирования, предоставленной, хотя, можно было бы хотеть быть осторожным относительно ввода пароля непосредственно на командной строке, поскольку это, скорее всего, закончится в файле истории оболочки где-нибудь. Возможное решение создает крошечный запрос сценария обертки использования пароля read -s -p. –  joelpet 22.02.2015, 00:55
  • 2
    , что существуют проблемы с тем подходом в недавних версиях Ubuntu, т.е. bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/595648 –  Frederick Nord 09.04.2015, 09:37

Я написал неспособную роль, которая делает это для вас. Просто получите роль DebOPS-INPOP.DROPBEAR_INITRAMFS и запустить его. Обратитесь к документации по работе .

0
27.01.2020, 19:32

В Arch Linux есть пакет AUR dropbear_initrd_encrypt , который делает то, что вы хотите, из коробки. Очень хорошо работает с проводными интерфейсами. Пришлось немного подправить для беспроводной связи.

2
27.01.2020, 19:32

К сожалению, ни один из вышеперечисленных ответов мне не помог. Более того, копирование закрытого ключа с сервера кажется парадоксальным.

Как бы то ни было, следующие инструкции сработали:

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

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

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, чтобы добавить (или изменить) строку:

#format [host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
#([hostname] can be omitted)
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

Обновление initialramfs

update-initramfs -u

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

sudo update-rc.d dropbear disable

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

  • Перезагрузите ваш сервер
  • Подключитесь к вашему серверу через ssh root@192.168.1.254 [-i ~/.ssh/id_rsa]
3
27.01.2020, 19:32

Я использовал технику, описанную другими на этой странице (SSH в initramfs с параметром ядра IPдля настройки сети )уже несколько лет, чтобы удаленно разблокировать безголовые серверы Ubuntu Linux (12.02, 14.04, 16.04 и 18.04 ).

Я даже зашел так далеко, что разработал программу на Python(разблокировать -удаленную -систему ), которая делает фактическую разблокировку за меня, потому что процесс выполнения этого вручную казался немного хрупким, и я начал бояться перезагрузки своих серверов, поэтому в духе «если это больно, стоит автоматизировать» я закодировал свои знания в Python (, и это действительно значительно упростило регулярные перезагрузки для установки обновлений безопасности ).

С тех пор я решил также поделиться своими личными заметками о шифровании удаленного корневого диска со всем миром. Связанная страница содержит довольно много подробностей о процедуре (, а также некоторые подсказки, которые здесь не упомянуты ), и я намерен поддерживать ее в актуальном состоянии.

2
27.01.2020, 19:32

Теги

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