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:
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