# Use a base image with Git and OpenSSH installed FROM alpine:latest # Install necessary packages RUN apk add --no-cache git openssh bash # Create a directory for the Git repositories # RUN mkdir -p /git-server/repos # Create a user for running the Git server with git-shell as the default shell RUN addgroup -S git && adduser -S git -G git -s /bin/bash && echo "git:*" | chpasswd -e # Set the working directory #WORKDIR /git-server # Create SSH directory, authorized_keys file, and set permissions RUN mkdir -p /home/git/.ssh \ && chmod 700 /home/git/.ssh \ && chown -R git:git /home/git/.ssh \ && chown -R git:git /home/git # Add your SSH public key and restrict to git-shell # RUN echo 'command="/usr/local/bin/git-init-repo.sh %r",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGBUUE8jxGg2bUaPN0+iJY7DLcf1C4E6/5j6AjBN/GTM8IQ0UJzcWj/gapj/tiVrG/iT5IEMiDy3pnzZQcbIugM=' > /home/git/.ssh/authorized_keys \ RUN echo 'command="/usr/local/bin/git-wrapper",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGBUUE8jxGg2bUaPN0+iJY7DLcf1C4E6/5j6AjBN/GTM8IQ0UJzcWj/gapj/tiVrG/iT5IEMiDy3pnzZQcbIugM=' > /home/git/.ssh/authorized_keys \ && chmod 600 /home/git/.ssh/authorized_keys \ && chown -R git:git /home/git/.ssh # Disable password authentication to enforce SSH key-based access RUN echo "PasswordAuthentication no" >> /etc/ssh/sshd_config # Set MOTD run echo "Connection successful!" > /etc/motd # Expose SSH port EXPOSE 22 COPY git-wrapper.sh /usr/local/bin/git-wrapper RUN chmod +x /usr/local/bin/git-wrapper # Copy the entrypoint script COPY entrypoint.sh /entrypoint.sh # Make the entrypoint script executable RUN chmod +x /entrypoint.sh # Set the entrypoint ENTRYPOINT ["/entrypoint.sh"]