Docker simplest alpine sshd
Long time no see, (but who cares?)
As I struggled to install and run sshd on alpine linux, I want to share it with you.
(I assume you are the one googled docker/alpine/sshd, aren't you?)
Before docker build
need public key to connect server.# create id_ed25519 and id_ed25199.pub to current dir. > sshd-keygen -t ed25519
Dockerfile
FROM alpine
RUN apk add --update --no-cache openssh && \
rm -rf /tmp/* /var/cache/apk/* && \
adduser -D user && \
passwd -u user && \
# SSHD CONFIG
{ \
echo "PermitRootLogin prohibit-password"; \
echo "PasswordAuthentication no"; \
} >> /etc/ssh/sshd_config && \
# GENERATE KEYS
{ \
echo "$PASS=PASS$RANDOM"; \
echo "PASSWORD for user is $PASS"; \
echo "echo -e $PASS'\n'$PASS | passwd user"; \
echo "ssh-keygen -A"; \
echo 'exec "$@"'; \
} > /usr/sbin/key_gen.sh
COPY id_ed25519.pub /home/user/.ssh/authorized_keys
RUN chown -R user.user /home/user && \
chmod 700 /home/user/.ssh && \
chmod 600 /home/user/.ssh/authorized_keys
ENTRYPOINT ["ash", "/usr/sbin/key_gen.sh"]
CMD ["/usr/sbin/sshd", "-D"]
to build it,
docker build -t mine/my_sshd_alpine:0.01 .
Running
> docker run -d -p 2222:22 mine/my_sshd_alpine --name my_sshdor alternatively
> docker run --it --rm -p 2222:22 mine/my_sshd_alpine --name my_sshd ash > /usr/sbin/sshd -D -E /var/log/auth.logto check how it works. On the client, you can connect server by
> ssh -i id_ed25519 -p 2222 user@locahost
Points are...
- use sshd -D option to work as foreground.
- user name and password are needed for "PasswordAuthentication no".
- without chmod .ssh and .ssh/authorized_keys, authentication fails.
- ssh on Mac does not seem to work with id_dsa.
Comments