Dockerfile:如何以非 root 用户身份在容器映像中运行 ssh 服务器?

问题描述 投票:0回答:1

我需要对我的 Dockerfile 进行哪些更改才能以 ssh 用户身份运行 sshd 服务器?

FROM alpine:3.15.4
RUN apk add --upgrade --no-cache openssh=8.8_p1-r1 \
    && \
    rm -rf /var/cache/apk/*

RUN addgroup -S jumper && adduser -S jumper -G jumper
COPY entrypoint.sh /entrypoint.sh

RUN chown -R jumper:jumper /etc/ssh

USER jumper
ENTRYPOINT ["sh", "/entrypoint.sh"]
CMD ["/usr/sbin/sshd", "-D"]

目前我在启动容器时收到错误消息“/etc/ssh/sshd_config:权限被拒绝”。

配置文件被复制到我的入口脚本中。

#!/bin/sh

if [ -f /config/sshd_config ]; then
    cp /config/sshd_config /etc/ssh/sshd_config
fi

ssh-keygen -A
exec "$@"
dockerfile
1个回答
0
投票

OpenSSH 可能可以工作(请参阅此问题),但运行非 root SSH 服务器的更直接方法是使用 dropbear。由于缺少权限而受到各种限制,特别是:

  • 只有运行SSH服务器的用户才能登录。
  • 密码登录无法使用。

这是一个简单的 Dockerfile 示例。运行映像时,您必须将用户 SSH 公钥作为环境变量传递

USER_SSH_PUBLIC_KEY

FROM ubuntu

RUN apt-get update && \
    apt-get install -y --no-install-recommends dropbear openssh-sftp-server && \
    apt-get clean

ARG USER_NAME=myuser
ARG USER_ID=1111
ARG GROUP_NAME=$USER_NAME
ARG GROUP_ID=$USER_ID
ARG HOME=/home/$USER_NAME

RUN groupadd --gid $GROUP_ID $GROUP_NAME && \
    useradd --uid $USER_ID --gid $GROUP_ID --create-home --shell /bin/bash --no-log-init $USER_NAME

USER $USER_NAME

WORKDIR $HOME

RUN mkdir -p ./.ssh && \
    chmod 700 ./.ssh && \
    touch ./.ssh/authorized_keys && \
    chmod 600 ./.ssh/authorized_keys && \
    dropbearkey -t rsa -f ./dropbear_rsa_host_key

EXPOSE 2222

CMD echo "$USER_SSH_PUBLIC_KEY" > $HOME/.ssh/authorized_keys && \
    exec dropbear -E -F -w -g -s -j -k -p 2222 -P ./dropbearPID -r ./dropbear_rsa_host_key
© www.soinside.com 2019 - 2024. All rights reserved.