在 systemd-nspawn 中生成 ssh 密钥

在 systemd-nspawn 中生成 ssh 密钥

我编写了几个脚本来下载、定制和准备 Raspberry Pi 的 Raspbian 映像。因为根文件系统将以只读方式挂载,所以我必须在第一次运行目标之前创建 ssh 密钥。

我发现 ssh 密钥生成是由服务处理的/etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service(顺便说一下,完全相同的文件也放置在 下/lib/systemd/system/regenerate_ssh_host_keys.service)。

这是它的内容:

[Unit]
Description=Regenerate SSH host keys
Before=ssh.service

[Service]
Type=oneshot
ExecStartPre=-/bin/dd if=/dev/hwrng of=/dev/urandom count=1 bs=4096
ExecStartPre=-/bin/sh -c "/bin/rm -f -v /etc/ssh/ssh_host_*_key*"
ExecStart=/usr/bin/ssh-keygen -A -v
ExecStartPost=/bin/systemctl disable regenerate_ssh_host_keys

[Install]
WantedBy=multi-user.target

因此,我将在 nspawn 容器内执行这些命令,以便在配置期间生成密钥。

问题是它在寻找/dev/hwrng/dev/urandom但现阶段我还没有。此外,我无法使用 systemctl 禁用该服务,因为在容器内我没有运行 dbus。还有其他方法可以禁用它吗?如果可能的话,我不想删除文件本身......

答案1

您可以通过删除文件然后创建符号链接来mask手动提供服务/etc/systemd/...

/etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service

to/dev/null而不是符号链接

/lib/systemd/system/regenerate_ssh_host_keys.service

像这样 :

ln -s /etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service /dev/null

当您取消屏蔽服务时,它会创建返回到/usr/lib/systemd/system/filename.以下是揭开它的方法:

systemctl umask regenerate_ssh_host_keys.service

或者重新创建符号链接。

ln -s /etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service /lib/systemd/system/regenerate_ssh_host_keys.service

PS:记得删除符号链接/dev/null

相关内容