前言

之前做了个 OpenWrt 编译环境的 Docker 镜像,为了使用上更方便打算加上 ssh 功能,这样可以直接连接到容器进行编译操作,就不需要连接到宿主机再输入命令进入容器了。在添加openssh-server安装指令与sshd启动指令后,容器无法运行。

错误日志

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key

问题分析

由于编译 OpenWrt 需要使用普通用户,所以我把容器的启动用户设置为了普通用户,但是由于普通用户没有权限去执行sshd启动指令,所以导致了这个问题。

解决方案

编辑 Dockerfile ,在启动命令前加上sudo

CMD [ "sudo", "/usr/sbin/sshd", "-D"]

不过先决条件是必须要安装sudo并赋予普通用户sudo权限。就像下面这样:

RUN apt install -y sudo && \
    echo 'user ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/user && \
    chmod 440 /etc/sudoers.d/user