Merge branch 'development'

This commit is contained in:
2025-09-11 17:54:51 +09:00
4 changed files with 107 additions and 8 deletions

View File

@@ -8,6 +8,8 @@ the clone base for one campaign and a simple crontab script to pull data from th
- base_setup.sh: setup for the folder structure, users, etc
- new_clone.sh: Basic clone script
- git_sync.sh: The script to run in crontab, to sync the changes
- switch_branch.sh: Switch from one branch to the other
- create_ssh_config.sh: setup ssh key and ssh config entry
## Run commands
@@ -30,6 +32,14 @@ as is, if the folder exists it will only copy the scripts, will not alter or cha
Planned to get auto fixes for wrong ACL, etc or missing config settings
### SSH Key generation
A SSH Key has to be generated for each git respository that will be synced and the configuration has to be added to the ssh config file
```sh
create_ssh_config.sh [SSH Key name] [repo url full] ([jump proxy])
```
### new_clone.sh
Create a new clone
@@ -38,7 +48,7 @@ Create a new clone
new_clone.sh [repository] [branch] ([host]) ([remote name])
```
The [host] is the SSH Host name entry, this sill repalce any "[host]:" in the [repository]. If the [host] is not set the host set in the [repository] will be used. If nothing found the script will abort
The [host] is the SSH Host name entry, this will replace any "[host]:" in the [repository]. If the [host] is not set the host set in the [repository] will be used. If nothing found the script will abort
A [branch] name must be set all the time.

82
src/bin/create_ssh_config.sh Executable file
View File

@@ -0,0 +1,82 @@
#!/usr/bin/env bash
# <s> [SSH Key name] [repo url] ([Jump Proxy])
# ssh-keygen -t ed25519 -N "" -C "${repo_url}" -f "${ssh_key_name}"
# CONFIG
# Host <Repo name flattened>
# Hostname <host name>
# User git
# IdentityFile ~/.ssh/<pem key name>
# [ProxyJump <jump proxy>]
REPOSITORY="$1";
JUMP_PROXY="$2";
# below are only to skip error
BRANCH="-"
BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/";
# shellcheck source=init.sh
. "${BASE_FOLDER}init.sh";
# base folder for ssh config
SSH_CONFIG_BASE="${GIT_WEBHOOK_BASE_FOLDER}.ssh/";
if [ ! -f "${SSH_CONFIG_BASE}config" ]; then
echo "[!] SSH config file does not exist: ${SSH_CONFIG_BASE}";
error=1;
fi;
if [[ "${REPOSITORY}" == *":"* ]]; then
REMOTE_HOST=$(echo "${REPOSITORY}" | cut -d ":" -f 1);
else
echo "[!] Must set a full repository path with remote host for the repository";
error=1;
fi;
# if we have an ":" in the repository, split by it and replace it with the remote host
if [[ "${REPOSITORY}" == *":"* ]]; then
REPOSITORY=$(echo "${REPOSITORY}" | cut -d ":" -f 2);
fi;
GIT_REPOSITORY_NAME=$(basename "${REPOSITORY}" .git);
if [ -f "${SSH_CONFIG_BASE}${GIT_REPOSITORY_NAME}.pem" ]; then
echo "SSH Key: ${SSH_KEY_NAME} already exists";
error=1
fi;
if
[ -f "${SSH_CONFIG_BASE}config" ] &&
[ -n "${GIT_REPOSITORY_NAME}" ] &&
grep "Host ${GIT_REPOSITORY_NAME}" "${SSH_CONFIG_BASE}config";
then
echo "[!] ssh config entry for Host '${GIT_REPOSITORY_NAME}' already exists";
error=1
fi;
if [ $error -eq 1 ]; then
exit;
fi;
# SUDO_COMMAND= as base
# ssh-keygen -t ed25519 -N "" -C "${GIT_REPOSITORY_NAME}" -f "${SSH_CONFIG_BASE}${SSH_KEY_NAME}"
# must add ".pem" if key name does not end in .pem
SSH_COMMAND=("${SUDO_COMMAND[@]}" "ssh-keygen" "-t" "ed25519" "-N" "" "-C" "${GIT_REPOSITORY_NAME}" "-f" "${SSH_CONFIG_BASE}${GIT_REPOSITORY_NAME}.pem")
# debug output for now
echo "";
echo "* SSH-KEYGEN:"
echo "";
echo "${SSH_COMMAND[*]}";
echo "";
echo "* ADD TO: ${SSH_CONFIG_BASE}config";
echo "";
echo "Host ${GIT_REPOSITORY_NAME}":
echo " Hostname ${REMOTE_HOST}";
echo " User git";
echo " PreferredAuthentications publickey";
echo " IdentityFile ~/.ssh/${GIT_REPOSITORY_NAME}.pem";
if [ -n "${JUMP_PROXY}" ]; then
echo " ProxyJump ${JUMP_PROXY}";
fi;
echo "";
# __END__

View File

@@ -23,7 +23,7 @@ if [ -z "$(command -v git)" ]; then
fi;
GIT_COMMAND_BASE=("git");
SUDO_COMMAND=()
if [ -n "${USE_SUDO}" ]; then
if [ "${USE_SUDO}" == 1 ]; then
# if we are root -> ok, else we must be SUDO USER
if [ "$(whoami)" = "root" ]; then
SUDO_COMMAND=("sudo" "-u" "${SUDO_USER}");

View File

@@ -4,10 +4,13 @@
# DATE: 2025/6/27
# DESC: create a new basic clone
# COMMAND: new_clone.sh <Repo.git> <branch> [<host>] [<Repo Target Name>] [<remote name>]
REPOSITORY="$1";
BRANCH="$2";
REMOTE_HOST="$3";
REMOTE_NAME="$4";
REPOSITORY_FOLDER="$4"
REMOTE_NAME="$5";
if [ -z "${REMOTE_NAME}" ]; then
REMOTE_NAME="origin"
fi;
@@ -24,7 +27,7 @@ if [ -z "${REMOTE_HOST}" ]; then
if [[ "${REPOSITORY}" == *":"* ]]; then
REMOTE_HOST=$(echo "${REPOSITORY}" | cut -d ":" -f 1);
else
echo "[!] Must set a remote host for the repository";
echo "[!] Must set a repository path with remote host for the repository";
error=1;
fi;
fi;
@@ -32,14 +35,20 @@ fi;
if [[ "${REPOSITORY}" == *":"* ]]; then
REPOSITORY=$(echo "${REPOSITORY}" | cut -d ":" -f 2);
fi;
# strip .git from the repository path, this is folder and ssh key Host name
if [ -z "${REPOSITORY_FOLDER}" ]; then
GIT_REPOSITORY_NAME=$(basename "${REPOSITORY}" .git);
else
GIT_REPOSITORY_NAME="${REPOSITORY_FOLDER}";
fi;
if [ $error -eq 1 ]; then
exit;
fi;
error=0
echo "* Validate SSH PEM Key exist and SSH config";
if ! grep "Host ${REMOTE_HOST}" "${GIT_WEBHOOK_BASE_FOLDER}"/.ssh/config; then
echo "ssh config entry for Host ${REMOTE_HOST} is missing";
if ! grep "Host ${GIT_REPOSITORY_NAME}" "${GIT_WEBHOOK_BASE_FOLDER}"/.ssh/config; then
echo "[!] ssh config entry for Host ${GIT_REPOSITORY_NAME} is missing";
error=1;
else
# make sure the identiy file is there
@@ -60,8 +69,6 @@ fi;
unique_id=$(uuidgen | tr -d '-' | head -c 8);
# strip .git from the repository path
GIT_REPOSITORY_NAME=$(basename "${REPOSITORY}" .git);
# log folder target
LOG_FILE="${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}${GIT_REPOSITORY_NAME}.log";
# from the repository get the last path without the .git so we have the target folder