創建加密raw系統鏡像

通過此方法生成的鏡像應用到伺服器後,可以在開機的時候使用ssh登陸後輸入密碼。

創建虛擬塊設備

根據您的伺服器硬盤大小創建硬盤大小(一般來說10G即可)

sudo dd if=/dev/zero of=archlinux.raw bs=1M count=10240 status=progress #創建10G大小的鏡像

創建迴環設備

將鏡像虛擬為迴環設備,為了對鏡像分區。

sudo losetup -f archlinux.raw

查看迴環設備

可以得知/dev/loop0即鏡像,以下以/dev/loop0作為例子.

[xuebaxi@xuebaxi ~]$ sudo losetup -a
/dev/loop0: [fd00]:26524 (/home/xuebaxi/archlinux.raw)

對迴環設備分區

像對待普通硬碟使用fdisk將迴環設備分為:

  • 一個/boot分區
  • 一個根分區

準備非/boot分區

加密分區,創建文件系統並且掛載.

sudo cryptsetup -y -v luksFormat /dev/loop0p2
sudo cryptsetup open /dev/loop0p2 cryptroot
sudo mkfs.ext4 /dev/mapper/cryptroot
sudo mount /dev/mapper/cryptroot /mnt

準備/boot分區

創建文件系統並且掛載

sudo mkdir /mut/boot
sudo mkfs.ext4 /dev/loop0p1
sudo mount /dev/loop0p1 /mnt/boot

生成密鑰

ssh-keygen -t ed25519

將公鑰拷貝到鏡像

以密鑰名字為id_ed25519(默認名字)為例子

mkdir -p /mnt/etc/tinyssh/root_key
cp ~/.ssh/id_ed25519.pub /mnt/etc/tinyssh/root_key

安裝archlinux

參考archlinux官方wiki,安裝完成後不要退出chroot.

安裝遠程輸入密碼需要的包

pacman -S  mkinitcpio-netconf  mkinitcpio-tinyssh mkinitcpio-utils

mkinitcpio設置

編輯/etc/mkinitcpio.conf在MODULES中加入:

virtio_pci virtio-net virtio-blk virtio_scsi sd_mod ext4

在HOOKS中加入

keyboard keymap encryptssh netconf
  • 注意netconf要在filesystems之前

重新生成initramfs

mkinitcpio -p linux
  • 注意: 如果遇到錯誤 libgcc_s.so.1 must be installed for pthread_cancel to work, 你需要將 /usr/lib/libgcc_s.so.1 添加到 “BINARIES” 中.

設置啟動器

設置以下內涵參數,其中device-UUID 為/dev/loop0p2的UUID

ip=dhcp cryptdevice=UUID=device-UUID:cryptroot root=/dev/mapper/cryptroot

退出chroot 環境

exit

umount分區

umount -R /mnt

卸載迴環設備

sudo losetup -d /dev/loop0

Comments