A tiny read-only git web frontend — browse bare repos with just PHP and git, no database, no framework.
#!/usr/bin/env bash
# Genererar ett nytt SSH-nyckelpar för en person, visar den publika nyckeln
# för kopiering, och lägger in den i git-användarens authorized_keys.
#
# Kör som root, från repo-roten på servern:
# sudo ./server/add-key.sh
set -euo pipefail
GIT_USER="${GIT_USER:-git}"
GIT_HOME="${GIT_HOME:-/var/git}"
SSH_DIR="$GIT_HOME/.ssh"
AUTH_KEYS="$SSH_DIR/authorized_keys"
if [ "$(id -u)" -ne 0 ]; then
echo "kör som root (sudo ./server/add-key.sh)" >&2
exit 1
fi
# Store the generated keypair in the invoking (sudo) user's home, not
# /root: root login over SSH is normally disabled, so scp'ing the key
# down would otherwise require an extra "sudo cp" detour first.
INVOKING_USER="${SUDO_USER:-root}"
INVOKING_HOME="$(getent passwd "$INVOKING_USER" | cut -d: -f6)"
KEY_STORE="${KEY_STORE:-$INVOKING_HOME/git-user-keys}"
if ! id "$GIT_USER" >/dev/null 2>&1; then
echo "användaren '$GIT_USER' finns inte ännu." >&2
echo "kör server/setup-server.sh först." >&2
exit 1
fi
read -rp "Ange userID (namn eller e-post) för nyckeln: " userid
if [ -z "$userid" ]; then
echo "userID får inte vara tomt" >&2
exit 1
fi
mkdir -p "$KEY_STORE"
keyfile="$KEY_STORE/${userid//[^A-Za-z0-9._-]/_}"
if [ -e "$keyfile" ]; then
echo "en nyckel med det namnet finns redan: $keyfile" >&2
exit 1
fi
ssh-keygen -t ed25519 -C "$userid" -N "" -f "$keyfile" >/dev/null
chown "$INVOKING_USER" "$keyfile" "${keyfile}.pub"
pubkey="$(cat "${keyfile}.pub")"
echo
echo "===== Publik nyckel ($userid) ====="
echo "$pubkey"
echo "===================================="
echo
mkdir -p "$SSH_DIR"
touch "$AUTH_KEYS"
if grep -qF "$pubkey" "$AUTH_KEYS"; then
echo "nyckeln finns redan i $AUTH_KEYS, hoppar över tillägg."
else
echo "$pubkey" >> "$AUTH_KEYS"
echo "nyckel tillagd i $AUTH_KEYS"
fi
chown -R "$GIT_USER":"$GIT_USER" "$SSH_DIR"
chmod 700 "$SSH_DIR"
chmod 600 "$AUTH_KEYS"
echo
echo "Privat nyckel sparad på servern: ${keyfile} (ägs av $INVOKING_USER)"
echo "Hämta ner den från din lokala dator:"
echo " scp ${INVOKING_USER}@<server>:${keyfile} ~/.ssh/git_kristoffersson"
echo "Ta sedan bort kopian på servern:"
echo " rm ${keyfile} ${keyfile}.pub"