如何使用 Yocto 安装 SSH 主机密钥

How to install SSH host-key using Yocto

我正在使用 Yocto 为 RPi 构建自定义发行版。 我的发行版包括 ssh 服务器(dropbear,但问题也适用于 openssh)

我注意到的一件烦人的事情是,每次我将新构建的映像刷写到板上时,我都会得到一个新的 SSH 主机密钥,这反过来会导致我的 ssh 客户端警告我服务器的主机密钥已更改,我需要从 /etc/known_hosts.

中删除服务器的指纹

我想知道是否有一种内置机制可以为构建系统提供秘密而不将它们放入源代码控制中。

更具体地说 - 有没有办法告诉 yocto“将此密钥文件作为 dropbear/sshd 的主机密钥”?

您可以获得将密钥安装在正确位置的方法。此密钥将由您预先生成并“放入”externalsrc 配方(inherit externalsrc 并适当设置 EXTERNALSRC,它可以指向主机系统上的任何路径)。配方存在于您使用的版本控制环境中,但密钥不在其中。然后你只需将生成的包添加到你的图像中。

我无法使用 解决方案,所以我在 openssh 上添加了以下内容(对于 dropbear 只有安装位置和文件名会有所不同) :

# File: recipes-networking/openssh/openssh_%.bbappend
#
# Recipe for installing openssh rsa host key
#

# This variable should be set in your local.conf to point to the host private
# key file
MYDISTRO_HOST_SSH_KEY ?= ""
export MYDISTRO_HOST_SSH_KEY

do_install_append_mydistro() {
    if [ ! -z $MYDISTRO_HOST_SSH_KEY ]; then
        install -d ${D}${sysconfdir}/ssh
        install -m 0600 $MYDISTRO_HOST_SSH_KEY ${D}${sysconfdir}/ssh/ssh_host_rsa_key
    fi
}

FILES_${PN} += "${sysconfdir}/ssh/ssh_host_rsa_key"