设置

设置

总结:alpine linux 3.9.4 的root用户无法使用ssh,除非设置密码,为什么?

我在使用 ssh 和 linux alpine 的普通 root 用户时遇到了奇怪的行为。

设置

我已经创建了一个 ssh-hop docker 容器。

FROM alpine

# add openssh and clean
RUN apk add --update openssh \
    && rm  -rf /tmp/* /var/cache/apk/*

# copy sshd config
COPY docker/sshd_config /etc/ssh/

# copy entrypoint script
COPY docker/docker-entrypoint.sh /usr/local/bin

# copy root SSH key
COPY docker/keys/root/id_rsa.pub /root/.ssh/authorized_keys

# copy host identification keys
COPY docker/keys/host /etc/ssh

EXPOSE 22
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/usr/sbin/sshd","-D"]

所提及的sshd_config

Port 22
PasswordAuthentication no
PubkeyAuthentication yes
LogLevel VERBOSE
ChallengeResponseAuthentication no

还有docker-entrypoint.sh

#!/bin/sh

#prepare run dir
if [ ! -d "/var/run/sshd" ]; then
  mkdir -p /var/run/sshd
fi

echo "Starting sshd"

exec "$@"

在构建 docker 容器之前通过以下方式生成适当的密钥:

echo "Generating root rsa key pair"
ssh-keygen -f docker/keys/root/id_rsa -N '' -t rsa -b 4096
echo "Generating host rsa key pair"
ssh-keygen -f docker/keys/host/ssh_host_rsa_key -N '' -t rsa -b 4096
echo "Generating host ecdsa key pair"
ssh-keygen -f docker/keys/host/ssh_host_ecdsa_key -N '' -t ecdsa
echo "Generating host ecdsa key pair"
ssh-keygen -f docker/keys/host/ssh_host_ed25519_key -N '' -t ed25519

问题

如果我使用 Docker Engine 18.09.6 和 alpine linux 版本 3.9.4 在 Ubuntu Server 18.04 下构建 Dockerfile,并尝试使用 ssh 进入容器,我会收到错误。但 alpine linux 版本 3.8.1 不会出现这种情况ssh [email protected] -i docker/keys/root/id_rsassh: connect to host 127.0.0.1 port 22: Connection refused

解决方案

我发现,只要为 root 用户设置密码(该用户在普通 Alpine 中没有该密码),ssh 进入服务器就可以按预期工作。因此,解决方案是将其添加RUN echo "root:root" | chpasswd到 Dockerfile 中。

问题

在服务器日志中 sshd 状态userauth_pubkey: disabled because of invalid user [preauth]。为什么除非设置密码,否则 root 用户对 sshd 无效?

包含完整设置的 Git repo:https://github.com/JSPRH/sshd-docker/tree/c7fdef446b37484589cac546e9192a37440327a7

相关内容