1

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

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

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

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

4

2 回答 2

2

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

于 2020-12-15T17:08:14.710 回答
0

我无法让@qschulz解决方案工作,所以我最终得到了以下附加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"
于 2020-12-18T11:55:34.847 回答