gitreef

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 2122474e49bf2dc1bcd1d11092ef416ee3042008
parent d86d5b8dd1b7293a3c2366cdb05ce331b4026cf3
Author: Matthias Jaros <jaros@mailbox.org>
Date:   Sat, 18 Oct 2025 22:17:20 +0200

ssh daemon starting up and user and repos are getting initialized. Missing login because users are locked

Diffstat:
MDockerfile | 11+++++++----
Adocker-compose.yml | 17+++++++++++++++++
Minit | 41++++++++++++++++++++++++++++++++++-------
Mssh.conf | 6+++---
4 files changed, 61 insertions(+), 14 deletions(-)

diff --git a/Dockerfile b/Dockerfile @@ -1,6 +1,9 @@ FROM alpine -RUN apk add --no-cache openssh-server fish +RUN apk add --no-cache openssh-server fish git + +# Modified ssh conf with disabled root login and no password authentication COPY ssh.conf /etc/ssh/sshd_config.d/ -COPY ./etc/ssh/ /etc/ssh/ -#ENTRYPOINT ["/usr/sbin/sshd", "-D", "-e"] -ENTRYPOINT ["fish"] + +COPY init /usr/local/bin/ +RUN chmod +x /usr/local/bin/init +ENTRYPOINT ["/usr/local/bin/init"] diff --git a/docker-compose.yml b/docker-compose.yml @@ -0,0 +1,17 @@ +# for local testing deployments +services: + git-server: + build: + context: . + dockerfile: Dockerfile + ports: + - "2222:22" + restart: no + command: + - "--users" + - test + - "--repos" + - pass:test + volumes: + - ./keys:/var/keys + - ./repos:/srv/repos diff --git a/init b/init @@ -1,17 +1,44 @@ -#!/usr/sbin/env fish +#!/usr/bin/env fish -argparse 'u/users+' 'r/repos+' -- $argv +argparse 'u/users=+' 'r/repos=+' -- $argv +or exit 1; # create users and copy keys in correct location, set permissions -for user in $_flag_u +for user in (string split ',' $_flag_u) echo "Setting up user: $user" - set -l HOME="/home/$user" - adduser --home $HOME --disabled-password "$user" + set -l HOME "/home/$user" + adduser --home $HOME -D "$user" mkdir "$HOME/.ssh" - cp "/srv/keys/$user" "$HOME/.ssh" + cp "/var/keys/$user/authorized_keys" "$HOME/.ssh/" chown -R $user "$HOME" - chmod 700 "$HOME" + chmod -R 700 "$HOME" end +for repoConfig in (string split ',' $_flag_r) + set -l parsedConfig (string split ':' $repoConfig) + set -l repo $parsedConfig[1] + + # we assume all repos to be in /srv/repos + set -l repoDir "/srv/repos/$repo" + echo "Setting up repo: $repo" + addgroup "$repo" + + # assign groups to user + for user in $parsedConfig[2..] + adduser "$user" "$repo" + id "$user" + end + + # setup repo dir + if not test -d $repoDir + mkdir -p $repoDir + git init --bare $repoDir -b trunk + end + chgrp -R "$repo" "$repoDir" +end + +echo "Setting up server" +# generate host keys in case +mkdir -p /var/keys/etc/ssh/ && ssh-keygen -A -f /var/keys # run ssh daemon /usr/sbin/sshd -D -e diff --git a/ssh.conf b/ssh.conf @@ -1,9 +1,9 @@ PermitRootLogin no PasswordAuthentication no -HostKey /etc/ssh/ssh_host_rsa_key -HostKey /etc/ssh/ssh_host_ecdsa_key -HostKey /etc/ssh/ssh_host_ed25519_key +HostKey /var/keys/etc/ssh/ssh_host_rsa_key +HostKey /var/keys/etc/ssh/ssh_host_ecdsa_key +HostKey /var/keys/etc/ssh/ssh_host_ed25519_key # Logging SyslogFacility AUTH