Compiling NSS module in Docker Alpine - fatal error: nss.h: No such file or directory

Compiling NSS module in Docker Alpine - fatal error: nss.h: No such file or directory

我构建了一个 SSH 堡垒镜像,允许客户通过反向 SSH 插入自己(由于授权密钥上的 permitopen 子句,他们都有一个分配的端口)。我通过处理所有 public 键的通用帐户实现了这一点。这些密钥通过 BASH 脚本动态检索,该脚本从 HTTP 服务器(AuthorizedKeysCommand SSHD 选项)中提取它们。

我的问题来自堡垒的用户群,我也希望它是动态的(而不是拥有一般用户)。为此,我需要一个 HTTP NSS 模块,它不作为本机包存在,所以我必须自己构建它。

作为开始,我找到了这个项目https://github.com/gmjosack/nss_http

在根据我的需要更新源代码之前,我试图在沙盒镜像中编译它,但我遇到了这个编译错误

In file included from nss_http-passwd.c:1:
nss_http.h:8:10: fatal error: nss.h: No such file or directory
 #include <nss.h>
          ^~~~~~~
compilation terminated.
make: *** [Makefile:20: nss_http-passwd] Error 1

我目前的形象是

FROM alpine

RUN apk update && \
    apk add bash gcc autoconf automake cmake make libc-dev curl-dev jansson-dev && \
    mkdir /src

WORKDIR /src

COPY . /src/

RUN make && make install

nssnss-dev Alpine 软件包链接到另一个 NSS(网络安全服务)...

如有任何帮助,我们将不胜感激!

你应该很好地安装 musl-nscd-dev 包:

apk add musl-nscd-dev

这个包提供了一个最小的 /usr/include/nss.h 头文件,它只提供 nss_status 枚举:

enum nss_status
{
    NSS_STATUS_TRYAGAIN = -2,
    NSS_STATUS_UNAVAIL = -1,
    NSS_STATUS_NOTFOUND = 0,
    NSS_STATUS_SUCCESS = 1,
    NSS_STATUS_RETURN = 2
};

这足以编译nss_http-passwd.c