مقدمه
اسکریپت installimage
در سیستم نجات Hetzner یک راه آسان برای نصب توزیع های مختلف لینوکس ارائه می دهد.
این آموزش نحوه استفاده از installimage را برای نصب یک سیستم رمزگذاری شده اوبونتو 22.04 و اضافه کردن باز کردن قفل از راه دور از طریق SSH (dropbear) در initramfs ذخیره شده در یک پارتیشن جداگانه /boot
را نشان می دهد.
پیش نیازها
- حساب Hetzner
- سرور به سیستم نجات راه اندازی شد
- کلید عمومی RSA، ECDSA یا ED25519 SSH
- هیچ شبکه خصوصی در Hetzner Cloud متصل نیست
مرحله 1 – کلید عمومی SSH را ایجاد یا کپی کنید
برای باز کردن قفل سیستم رمزگذاری شده از راه دور، یک کلید SSH لازم است. بعداً از این کلید برای ورود به سیستم بوت شده استفاده خواهید کرد. دیمون dropbear SSH موجود در اوبونتو 22.04 فقط از کلیدهای RSA و ECDSA پشتیبانی می کند. اگر چنین کلیدی ندارید، باید آن را ایجاد کنید. ما استفاده از کلیدهای ED25519 یا ECDSA را توصیه می کنیم.
به عنوان مثال برای ایجاد یک کلید SSH ED25519، اجرا کنید:
ssh-keygen -t ed25519
کلید عمومی را در سیستم نجات کپی کنید، به عنوان مثال. با استفاده از scp:
scp ~/.ssh/id_ed25519.pub root@<your-host>:/tmp/authorized_keys
مرحله 2 – فایل پیکربندی installimage را ایجاد یا کپی کنید
هنگامی که installimage بدون هیچ گزینه ای فراخوانی می شود، در حالت تعاملی شروع می شود و پس از انتخاب یک تصویر توزیع، ویرایشگر را باز می کند. پس از خروج از ویرایشگر، نصب ادامه می یابد و پیکربندی مربوطه به صورت /installimage.conf در سیستم نصب شده ذخیره می شود. در این آموزش ما چنین فایل پیکربندی را برای نصب مستقیم ارسال می کنیم.
یک فایل /tmp/setup.conf با محتوای زیر ایجاد کنید یا آن را در سرور در سیستم نجات کپی کنید.
توجه: رمز عبور ایمن را جایگزین Secret کنید و نام درایو و پارتیشن بندی را در صورت نیاز تنظیم کنید.
CRYPTPASSWORD secret
DRIVE1 /dev/sda
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART / ext4 all crypt
IMAGE /root/images/Ubuntu-2204-jammy-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys
این پیکربندی، اوبونتو را روی یک درایو (/dev/sda) با یک /boot رمزگذاری نشده جداگانه که برای باز کردن قفل از راه دور لازم است نصب میکند.
مرحله 3 – اسکریپت پس از نصب را ایجاد یا کپی کنید
برای باز کردن قفل پارتیشن رمزگذاری شده از راه دور، باید سرور dropbear SSH را نصب و به initramfs اضافه کنیم که در پارتیشن رمزگذاری نشده /boot ذخیره شده است. این همچنین باعث می شود که dhclient برای پیکربندی شبکه، اما بدون هیچ چیز اضافی، درج شود. برای فعال کردن پشتیبانی از Hetzner Cloud، باید یک قلاب اضافه کنیم که شامل پشتیبانی از مسیرهای RFC3442 است.
برای اجرای این مراحل اضافی، به یک اسکریپت پس از نصب برای installimage نیاز داریم
یک فایل /tmp/post-install.sh در سیستم نجات با محتوای زیر ایجاد کنید:
#!/bin/bash
add_rfc3442_hook() {
cat << EOF > /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
#!/bin/sh
PREREQ=""
prereqs()
{
echo "\$PREREQ"
}
case \$1 in
prereqs)
prereqs
exit 0
;;
esac
if [ ! -x /sbin/dhclient ]; then
exit 0
fi
. /usr/share/initramfs-tools/scripts/functions
. /usr/share/initramfs-tools/hook-functions
mkdir -p \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
cp -a /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
EOF
chmod +x /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
}
remove_unwanted_netplan_config() {
cat << EOF > /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
#!/bin/sh
if [ -d "/run/netplan" ]; then
interface=\$(ls /run/netplan/ | cut -d'.' -f1)
if [ \${interface:+x} ]; then
rm -f /run/netplan/"\${interface}".yaml
fi
fi
EOF
chmod +x /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
}
# Install rfc3442 hook
add_rfc3442_hook
# Adding an initramfs-tools script to remove /run/netplan/{interface}.yaml,
# because it is creating unwanted routes
remove_unwanted_netplan_config
# Update system
apt-get update >/dev/null
apt-get -y install cryptsetup-initramfs dropbear-initramfs
# Copy SSH keys for dropbear and change the port
cp /root/.ssh/authorized_keys /etc/dropbear/initramfs/
sed -ie 's/#DROPBEAR_OPTIONS=/DROPBEAR_OPTIONS="-I 600 -j -k -p 2222 -s"/' /etc/dropbear/initramfs/dropbear.conf
dpkg-reconfigure dropbear-initramfs
update-initramfs -u
نکته مهم: اسکریپت پس از نصب را قابل اجرا کنید:
chmod +x /tmp/post-install.sh
مرحله 4 – نصب را شروع کنید
قبل از شروع نصب، دوباره محتوای فایل های زیر را بررسی کنید:
- /tmp/authorized_keys – کلید SSH عمومی شما (RSA، ECDSA یا ED25519)
- /tmp/setup.conf – installimage config
- /tmp/post-install.sh – قابل اجرا است و حاوی اسکریپت پس از نصب است.
اکنون با دستور زیر آماده شروع نصب هستید:
installimage -a -c /tmp/setup.conf -x /tmp/post-install.sh
صبر کنید تا نصب کامل شود و debug.txt را برای هر گونه خطا بررسی کنید.
مرحله 5 – سیستم نصب شده را بوت کنید
پس از اتمام نصب و رفع هر گونه خطا، می توانید راه اندازی مجدد را اجرا کنید تا سرور راه اندازی مجدد شود و سیستم تازه نصب شده بوت شود. اگر یک KVM متصل یا از طریق کنسول از راه دور در یک نمونه ابری دارید، میتوانید فرآیند بوت را تماشا کنید.
بعد از مدتی سرور باید به پینگ پاسخ دهد. اکنون از طریق SSH وارد dropbear شوید و cryptroot-unlock را برای باز کردن قفل پارتیشن(های) رمزگذاری شده اجرا کنید.
- با کلید ED25519 یا ECDSA
ssh -p 2222 root@<your-host>
- با کلید RSA
در مورد RSA باید به صراحت مشخص کنیم که این کلید پذیرفته می شود.
ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa
مثال:
$ ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa
BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# cryptroot-unlock
Please unlock disk luks-80e097ad-c0ab-47ce-9302-02dd316dc45c:
اگر رمز عبور صحیح باشد، بوت ادامه می یابد و شما به طور خودکار از جلسه SSH موقت قطع می شوید.
پس از چند ثانیه می توانید وارد سیستم جدید خود شوید.
توجه
این راهنما به صراحت فقط برای اوبونتو 22.04 نوشته شده است. ممکن است روی توزیع های دیگر کار نکند.