hpy*_*hpy 69 boot ssh encryption headless lvm
当我安装 Ubuntu 10.04 和现在的 10.10 时,我可以选择为我的硬盘启用“加密 LVM”。选择该选项后,系统会在引导期间提示我输入密码以解密 LVM。
现在,我正在考虑设置一个运行 Linux(不一定是 Ubuntu)的无头服务器,但我担心由于服务器是无头的,我将无法在启动期间对其进行解密。我能否在启动期间通过 SSH 输入加密 LVM 的密码?如果是这样,我该如何设置?或者还有其他解决方案吗?同样,这个问题不是特定于 Ubuntu 的。谢谢。
小智 30
对于较新版本的 ubuntu,例如 14.04,我发现 @dragly 和这篇博文的答案的组合非常有帮助。转述:
(在服务器上)安装 Dropbear
sudo apt-get install dropbear
Run Code Online (Sandbox Code Playgroud)(在服务器上)复制和分配 root 公钥/私钥登录权限
sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
sudo chown user:user ~/id_rsa
Run Code Online (Sandbox Code Playgroud)记住将用户更改为您在服务器上的用户名
(在客户端)从服务器获取私钥
scp user@remote.server:~/id_rsa ~/.ssh/id_rsa_dropbear
Run Code Online (Sandbox Code Playgroud)(在客户端)向 ssh 配置添加一个条目
Host parkia
Hostname 192.168.11.111
User root
UserKnownHostsFile ~/.ssh/know_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Remember to change _parkia_ to whatever you'd like to type `ssh my-box` to be.
Run Code Online (Sandbox Code Playgroud)(在服务器上)创建该文件的/etc/initramfs-tools/hooks/crypt_unlock.sh
(在服务器上)使该文件可执行
sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Run Code Online (Sandbox Code Playgroud)更新 initramfs
sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)在启动时禁用 dropbear 服务,以便在分区解密后使用 openssh
sudo update-rc.d dropbear disable
Run Code Online (Sandbox Code Playgroud)你完成了。试试看。如果您需要这样做,请查看上面链接的博客文章,了解有关如何使用静态 IP 地址配置服务器的说明。
小智 24
此博客文章中显示了使用 BusyBox 和 Dropbear 进行此类设置的指南。early-ssh 对我不起作用,显然不再需要了。
我在下面总结了你需要做的事情。有关更多详细信息,请查看上面的帖子:
在您的服务器上安装 BusyBox 和 Dropbear
sudo apt-get install dropbear busybox
Run Code Online (Sandbox Code Playgroud)在服务器上更新您的 initramfs
sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)将 dropbear 生成的私钥复制到您的客户端机器上。您可能必须将其复制到新目录并更改所有权才能执行此操作。在您的服务器上执行以下操作:
sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
sudo chown user:user ~/id_rsa
Run Code Online (Sandbox Code Playgroud)
请记住用您的用户名替换用户。密码登录似乎不起作用。
现在,您可以通过在客户端上调用以下命令来使用 scp 传输私钥:
scp user@remote.server:~/id_rsa ~/.ssh/id_rsa_dropbear
Run Code Online (Sandbox Code Playgroud)设置客户端的 ~/.ssh/config 文件以便于登录。用文本编辑器打开它并添加以下内容:
Host myremoteserver
HostName my.remote.server
User root
UserKnownHostsFile ~/.ssh/known_hosts.initramfs
IdentityFile ~/.ssh/id_rsa_dropbear
Run Code Online (Sandbox Code Playgroud)
将 Host 更改为您喜欢的任何内容,将 HostName 更改为您的服务器名称。让用户成为root。它似乎是 Dropbear 中唯一接受的用户。保存并关闭文件。
重新启动服务器并等待密码提示。给 Dropbear 几秒钟的时间来检测并设置其互联网连接。在您的客户端上使用以下命令连接到您的服务器:
ssh myremoteserver # or any name you chose
Run Code Online (Sandbox Code Playgroud)登录后,在您的服务器上发出以下命令。有关详细信息,请参阅博客文章:
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;
Run Code Online (Sandbox Code Playgroud)
输入密码需要一些时间(30 秒)。出现提示时输入。
通过键入关闭连接
exit
Run Code Online (Sandbox Code Playgroud)您的服务器现在应该已解锁其加密硬盘驱动器并正常启动。
(非常感谢博文的原作者!)
wag*_*wag 18
我认为early-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...
Run Code Online (Sandbox Code Playgroud)
已经有一个 .deb 包可用,所以你可能对 Ubuntu 没问题。
ger*_*ijk 16
请查看/usr/share/doc/cryptsetup/README.remote.gz
(Ubuntu 包cryptsetup
)中的 cryptsetup 自述文件。里面有一个完整的指南来完成这个。它类似于Dragly 的 answer,但我认为这更优雅一些。(Dropbear 格式的密钥,通过 FIFO 而不是脆弱的 shell 脚本传递密码,等等)
通过 initramfs 中的 ssh 登录解锁 rootfs
您可以在远程启动时解锁您的 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
根本没有设置,则只有在现有 cryptroot 设置的情况下才会安装 dropbear。用于 initramfs 的主机密钥是
dropbear_dss_host_key
和dropbear_rsa_host_key
,都位于/etc/initramfs-tools/etc/dropbear/
. 如果在编译 initramfs 时它们不存在,它们将被自动创建。以下是手动创建它们的命令:Run Code Online (Sandbox Code Playgroud)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 格式):
Run Code Online (Sandbox Code Playgroud)dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
要将密钥从 dropbear 格式转换为 openssh 格式:
Run Code Online (Sandbox Code Playgroud)/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \ /etc/initramfs-tools/root/.ssh/id_rsa
提取公钥:
Run Code Online (Sandbox Code Playgroud)dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \ grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub
将公钥添加到 authorized_keys 文件:
Run Code Online (Sandbox Code Playgroud)cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys
如果您希望使用 dhcp 配置某些接口,设置
DEVICE=
in/etc/initramfs-tools/initramfs.conf
就足够了。initramfs 也应该遵守ip=
内核参数。如果您使用 grub,您可能希望将其设置/boot/grub/menu.lst
在 '# kopt=
' 行或附加到特定的 'kernel
' 行。该ip=
内核参数记录在Documentation/nfsroot.txt
内核源代码树。问题
update-initramfs
更改配置时不要忘记运行以使其生效!为 ssh 守护程序收集足够的熵有时似乎是一个问题。ssh 守护程序的启动可能会延迟,直到检索到足够的熵。这对于启动过程是非阻塞的,因此当您在控制台时,您不必等待 sshd 完成其启动。
开锁程序
要从远程解锁,您可以执行以下操作:
Run Code Online (Sandbox Code Playgroud)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
>,2009 年 9 月 30 日,星期三
感谢jap在另一个频道上向我指出这一点。
归档时间: |
|
查看次数: |
66230 次 |
最近记录: |