diff --git a/.gitignore b/.gitignore index aa8a9ca..f6882bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Log-Verzeichnis und Dateien (Logdateien nie committen) -log/ +log/ssh-cert-login.log # Temporäre SSH Keys temp_keys/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..d0c8ce3 --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ +# SSH-Zertifikats-Login mit zentraler CA + +Dieses Projekt ermöglicht eine einfache und sichere Anmeldung per SSH auf mehreren Servern über kurzzeitige, von einer zentralen Zertifizierungsstelle (CA) signierte SSH-Zertifikate. + +--- + +## Features + +- Zentrale SSH CA zur Signierung temporärer SSH-Schlüssel +- Automatisches Erzeugen und Signieren von SSH-Keys +- Interaktive Auswahl der Ziel-VM, des Benutzers und der Zertifikatsgültigkeit über `gum` +- Logging aller wichtigen Aktionen (Konsole + Logdatei) +- Schutz der privaten CA-Schlüssel durch zentrale Signatur-VM +- Flexible Erweiterbarkeit + +--- + +## Verzeichnisstruktur + +``` +. +├── log/ # Logs und Logging-Script +│ ├── logging.sh +│ └── ssh-cert-login.log +├── temp_keys/ # Temporäre SSH-Schlüssel werden hier erzeugt +├── login.sh # Hauptscript für Zertifikatserstellung und SSH-Login +├── remote_sign.sh # Remote-Skript auf der CA-VM zur Signatur +├── .gitignore # Git Ignore für Logs, temporäre Keys, etc. +└── README.md # Diese Datei +``` + +--- + +## Voraussetzungen + +- Bash unter Linux/macOS +- `ssh` und `ssh-keygen` +- `scp` für Dateiübertragungen +- `gum` (https://github.com/charmbracelet/gum) für das interaktive Terminal-Menü +- Zugriff auf eine CA-VM mit privatem CA-Key und dem `remote_sign.sh` Script +- SSH-Key für Anmeldung an der CA-VM (`id_ca` o.ä.) + +### Hinweis zur CA-Authentifizierung + +Das Skript prüft automatisch, ob der SSH-Private-Key `id_ca` (Standardpfad: `~/.ssh/id_ca`) vorhanden ist. +Dieser Schlüssel wird zur Authentifizierung auf der CA-VM benötigt, um die Signaturanfrage abzusenden. + +Falls die Datei nicht vorhanden ist, bricht das Skript mit einer Fehlermeldung ab. + +👉 **Lösung:** Stelle sicher, dass sich dein Private Key `id_ca` im richtigen Verzeichnis befindet und per `chmod 600 ~/.ssh/id_ca` korrekt geschützt ist. Optional kannst du den Pfad im Skript `login.sh` anpassen, falls du einen anderen Schlüssel verwenden möchtest. + +--- + +## Installation + +1. `gum` installieren (z.B. via `brew install gum` oder Snap/Paketmanager) + +2. Alle Skripte und Verzeichnisse in ein Git-Repository klonen oder kopieren + +3. CA-VM korrekt konfigurieren (privater CA-Key, `remote_sign.sh`) + +4. `login.sh` ausführbar machen: + ```bash + chmod +x login.sh + ``` + +5. Log-Verzeichnis anlegen (falls nicht vorhanden): + ```bash + mkdir -p log + ``` + +6. Im Log-Verzeichnis die Datei rotate.cfg anlegen, meist mit diesen Parametern: + ```bash + /var/log/my_app/*.log { + daily + rotate 7 + compress + missingok + notifempty + dateext + } + ``` +--- + +## Nutzung + +Starte das Login-Skript: + +```bash +./login.sh +``` + +- Wähle die Ziel-VM aus der Liste +- Wähle den SSH-Benutzer (vordefiniert oder eigene Eingabe) +- Wähle die Gültigkeitsdauer des Zertifikats +- Das Skript generiert einen temporären SSH-Key, sendet den Public Key zur CA, holt das signierte Zertifikat zurück und startet die SSH-Verbindung zum Ziel + +--- + +## Sicherheitshinweise + +- Der private CA-Schlüssel sollte ausschließlich auf der CA-VM gespeichert und geschützt werden +- Temporäre SSH-Keys sind nur kurz gültig (Standard 5 Minuten) +- Logdateien enthalten keine privaten Schlüssel, aber Pfadangaben und Benutzerinformationen – vor unberechtigtem Zugriff schützen + +--- + +## Lizenz + +MIT License (oder nach Wunsch anpassen) + +--- + +## Kontakt + +Bei Fragen oder Problemen gerne melden! + +--- + +**Viel Erfolg mit deinem zentralen SSH-Zertifikats-Login!** + + +--- + +## Gum installieren (falls nicht vorhanden) + +Falls `gum` noch nicht installiert ist, kannst du es direkt von GitHub beziehen: + +```bash +# Neueste Version ermitteln +GUM_VERSION=$(curl -s https://api.github.com/repos/charmbracelet/gum/releases/latest | grep tag_name | cut -d '"' -f 4) + +# Download für Linux x86_64 +curl -L "https://github.com/charmbracelet/gum/releases/download/${GUM_VERSION}/gum_${GUM_VERSION#v}_Linux_x86_64.tar.gz" -o gum.tar.gz + +# Entpacken +tar -xzf gum.tar.gz + +# Nach /usr/local/bin verschieben +sudo install gum /usr/local/bin + +# Testen +gum --version +``` + +Alternativ findest du alle Releases unter: +👉 https://github.com/charmbracelet/gum/releases \ No newline at end of file diff --git a/id_ca b/id_ca deleted file mode 100644 index 06202fb..0000000 --- a/id_ca +++ /dev/null @@ -1,38 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -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 ------END OPENSSH PRIVATE KEY----- diff --git a/id_ca.pub b/id_ca.pub deleted file mode 100644 index 8610a24..0000000 --- a/id_ca.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2VrWLyOnW5eHKAASFtxvHEnvL1unTHHsvb4ndNAxmhU+4gOMddRvghFymcQS4VmqIErCOKHg36AjzPp3oBw9AL1HPw7nf+SUbZQi9iKhbs1+lC0fNqRQm9CY4t+tjAC8AwxN4os1yvVwmyXqaFTaArRAk1BCOP2gQBr7OmO0ECVTtXXKjyAxnvp/4GouU9KTjs+tDAYbcQz5H6yXlwhDjqO65X1HBC61wDo8FTqeIWI215j0pfgE5YNURJgOkmjcs34IxrgyRt32fKaXZNXRbDOc1OAwAm3Sk7yGiuwTohp5HsnYp8yQjTz50OlyZuyT1g3y5Dkz5ISKsZeQ2Uag9DLjhXxAUF8G2oFOs0z9IU9LKrv89A9xDUFsoMtI6dnUAOHWBhyUDxSgYWT87bmsUoHZ17zyp2I6QzG6olGH5bUoq/ApuxfnTvIie/ZeVoC0jPvys4MOPMANNJNNrSkO++2vy6eOhcEvSWaFkg8oHabOr4cCblueIFhV+sp6ObDM= oberkoetter@PC7-77 diff --git a/log/log.txt b/log/log.txt deleted file mode 100644 index e69de29..0000000 diff --git a/log/logging.sh b/log/logging.sh index cc90c08..4d56e83 100755 --- a/log/logging.sh +++ b/log/logging.sh @@ -1,7 +1,7 @@ #!/bin/bash -DEFAULT_LOG_FILE="./log/log.txt" -ACTIVE_LOG_FILE="/home/oberkoetter/Dokumente/Git/log.txt" +DEFAULT_LOG_FILE="./log-default.txt" +ACTIVE_LOG_FILE="./log.txt" log_init() { ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}" diff --git a/login.sh b/login.sh old mode 100644 new mode 100755 index 0a4ff38..aad8abb --- a/login.sh +++ b/login.sh @@ -7,101 +7,105 @@ YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color -# Pfad zum Script-Verzeichnis -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# CA-Auth Schlüssel +CA_KEY_PATH="$HOME/.ssh/id_ca" -# Logging-Script einbinden -source "$SCRIPT_DIR/log/logging.sh" - -# Logdatei im log/-Verzeichnis -LOG_FILE="$SCRIPT_DIR/log/ssh-cert-login.log" - -log_init "$LOG_FILE" -log_start "SSH Zertifikat Login" - -# Config CA und Ziel (Standardwerte) +# Config CA_HOST="100.87.87.5" CA_USER="alf" CA_PORT=22 -REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" -KEY_DIR="$SCRIPT_DIR/temp_keys" +REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" # Pfad auf der CA-VM, wo das Script zum Signieren zu finden ist +KEY_DIR="./temp_keys" KEY_NAME="temp_user_key" -CA_SSH_KEY="$HOME/.ssh/id_ca" +LOG_DIR="$HOME/Gitea/ssh-cert-login/log" +LOG_SCRIPT="${LOG_DIR}/logging.sh" +LOG_FILE="${LOG_DIR}/ssh-cert-login.log" -# Gum Check -if ! command -v gum &> /dev/null; then - log_error "gum ist nicht installiert. Bitte zuerst installieren." + +# Logging initialisieren +source "$LOG_SCRIPT" +log_init "$LOG_FILE" +log_start "SSH-Login über CA-Zertifikat" + +# Prüfen, ob der CA-Schlüssel vorhanden ist +if [[ ! -f "$CA_KEY_PATH" ]]; then + echo -e "${RED}[!] CA-SSH-Schlüssel ($CA_KEY_PATH) nicht gefunden. Vorgang wird abgebrochen.${NC}" + echo "Bitte stelle sicher, dass ~/.ssh/id_ca vorhanden und korrekt gesetzt ist." + log_error "Kein Publickey zur CA-VM!" exit 1 fi -# VM Alias → IP Map -declare -A VM_MAP=( - [Server1]="100.87.87.101" - [ABS]="100.87.87.102" - [OMVPi]="100.87.87.80" - [OMV2000]="100.87.87.81" - [CA]="100.87.87.5" -) - -# Auswahl der VM per Alias mit gum choose -VM_ALIAS=$(gum choose --header "Wähle die Ziel-VM" "${!VM_MAP[@]}") -TARGET_HOST="${VM_MAP[$VM_ALIAS]}" - -# Benutzer-Auswahl mit festen Optionen + freie Eingabe -USER_OPTIONS=("alf" "root" "oberkoetter" "Anderer Benutzer") -SELECTED_USER=$(gum choose --header "Wähle den SSH-Benutzer" "${USER_OPTIONS[@]}") - -if [ "$SELECTED_USER" == "Anderer Benutzer" ]; then - SSH_USER=$(gum input --placeholder "Benutzername eingeben") -else - SSH_USER="$SELECTED_USER" +# Gum Check +if ! command -v gum &> /dev/null; then + echo -e "${RED}[!] gum ist nicht installiert. Bitte zuerst installieren.${NC}" + log_error "GUM nicht installiert!" + exit 1 fi +# Ziel-Host-Auswahl +declare -A HOSTS=( + ["Server1"]="100.87.87.101" + ["ABS"]="100.87.87.102" + ["OMVPi"]="100.87.87.80" + ["OMV2000"]="100.87.87.81" + ["CA"]="100.87.87.5" + ["PHOSCON"]="100.87.87.90" + ["DIETPI"]="100.87.87.4" + ["PROXI"]="100.87.87.100" + ["MATE3"]="100.87.87.108" + ["PC77"]="100.87.87.77" +) + +TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}") +TARGET_HOST="${HOSTS[$TARGET_LABEL]}" +log_info "Zielsystem gewählt: $TARGET_LABEL ($TARGET_HOST)" + TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222") +log_info "SSH-Port: $TARGET_PORT" -VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sek. 5min, 10min, 30min, 1h -VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen" "${VALIDITY_OPTIONS[@]}") +# Benutzer-Auswahl +USER_CHOICES=("alf" "root" "oberkoetter" "Benutzer manuell eingeben") +SSH_USER=$(gum choose --header "SSH-Benutzer wählen" "${USER_CHOICES[@]}") +if [[ "$SSH_USER" == "Benutzer manuell eingeben" ]]; then + SSH_USER=$(gum input --placeholder "SSH Benutzername") +fi +log_info "Verwendeter Benutzer: $SSH_USER" -# Logge die Ziel-VM und den SSH-Benutzer -log_info "Ziel-VM: $VM_ALIAS ($TARGET_HOST)" -log_info "SSH-Benutzer: $SSH_USER" +# Gültigkeit wählen +VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden +VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen (Sekunden)" "${VALIDITY_OPTIONS[@]}") +log_info "Zertifikatsgültigkeit: $VALIDITY Sekunden" -# Keys vorbereiten +# Schlüssel vorbereiten mkdir -p "$KEY_DIR" cd "$KEY_DIR" -log_info "Prüfe auf vorhandene temporäre Schlüssel..." -if [[ -f "$KEY_NAME" || -f "${KEY_NAME}.pub" || -f "${KEY_NAME}-cert.pub" ]]; then - log_warn "Vorherige temporäre Schlüssel werden gelöscht..." - rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub" -fi +log_info "Prüfe auf vorhandene temporäre Schlüssel" +rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub" -log_info "Generiere temporären SSH-Key..." +log_info "Generiere temporären SSH-Key" ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null -log_info "Sende Public Key zur CA (${CA_HOST})..." -scp -i "$CA_SSH_KEY" -P "$CA_PORT" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || { +log_info "Sende Public Key zur CA (${CA_HOST})" +scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || { log_error "Fehler beim Senden des Public Keys zur CA" exit 1 } log_info "Fordere Signatur von CA an..." -ssh -i "$CA_SSH_KEY" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" \ - "$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || { +ssh -i "$CA_KEY_PATH" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" "$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || { log_error "Fehler bei der Signierung durch die CA" exit 1 } -log_info "Lade signiertes Zertifikat von CA..." -scp -i "$CA_SSH_KEY" -P "$CA_PORT" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || { +log_info "Lade signiertes Zertifikat von CA" +scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || { log_error "Fehler beim Abrufen des Zertifikats von der CA" exit 1 } -log_info "Zertifikat erfolgreich erhalten" -log_info "Starte SSH-Verbindung zum Zielsystem (${VM_ALIAS} / ${TARGET_HOST}) über Port ${TARGET_PORT}..." - +log_info "Zertifikat erfolgreich erhalten – starte SSH-Verbindung" ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST" -log_end "SSH Zertifikat Login" +log_end "SSH-Login abgeschlossen" diff --git a/rclonecloner.sh b/rclonecloner.sh new file mode 100644 index 0000000..e687bca --- /dev/null +++ b/rclonecloner.sh @@ -0,0 +1,158 @@ +########## 0 Einstellungen und Funktionen ############### +jjahr=$(date +%Y) +AArchiv=$(date +%Y-%m-%d-%H-%M) +testlauf="ja" # bei "ja" wird übersprungen: Hörbücher A-Z, Bilder Alf und Louisa +logbuch="root/log.txt" + +source /root/logger.sh + +function eingehaengt () { + DECRYPTED_DIR="/srv/dev-disk-by-uuid-cdd3de56-0b4f-48cf-aec0-abf441a759b5/" + + if mountpoint -q "$DECRYPTED_DIR"; then + return 0 + else + return 1 + fi +} + + +################## Hauptschleife ##################### + +neu_log +info_log "RCLCLO Archiv-Ordner gesetzt auf: $AArchiv" +info_log "RCLCLO Starte grosses Cloning..." + +if [ $testlauf = "ja" ] +then + err_log "RCLCLO TESTLAUF!" +else + err_log "RCLCLO Kein Testlauf." +fi + +info_log "RCLCLO Teste Laufwerk..." + +eingehaengt +if [ $? -eq 0 ] # Prüfe auf 0 für Erfolg, nicht auf 1 +then + info_log "RCLCLO Laufwerk OK!" +else + err_log "RCLCLO Laufwerk nicht freigegeben." + err_log "RCLCLO EXIT!" + exit 2 +fi + +######## 1 OMV-Config sichern... ######### +info_log "OMV-Config sichern" +if [ $testlauf = "nein" ] +then + rclone sync /etc/openmediavault/config.xml jottasecret:/BackupHomelab/OMV80/ --log-file=$logbuch --backup-dir=jottasecret:/BackupHomelab/Archiv/OMV80/$AArchiv/ -P +else + info_log "OMV-Config-Sicherung übersprungen" +fi + +######## 2 Phonostar-Cloning ############ +info_log "RCLCLO Starte PhonoStar-Download" +if [ $testlauf = "nein" ] +then + rclone move magentawralto:/phonostar_radio_cloud/ /srv/MEDIEN/Audio/Radio-Archiv/Phonostar/ --create-empty-src-dirs --log-file=$logbuch -P + mmonat=$(date +%m-%Y) + # find /srv/MEDIEN/Audio/Radio-Archiv/Phonostar -iname "*$mmonat*" -exec mv {} /srv/MEDIEN/Audio/Radio-Archiv/2025/$(date +%m)/ -v \; >>/root/log.txt + err_log "RCLCLO Phonostar Downlod ERR: $?" +else + info_log "Phonostar-Download übersprungen" +fi + +######### 3 Radio-Cloning ################ +info_log 'RCLCLO Starte Radio-Cloning...' +info_log "Jahr: $jjahr" +if [ $testlauf = "nein" ] +then + rclone sync -P /srv/MEDIEN/Audio/Radio-Archiv/$jjahr jotta:/Audio/Radio/$jjahr/ --exclude=gPodder/ --log-file=$logbuch --backup-dir=jotta:/Archiv/Audio/$AArchiv/Radio/$jjahr/ + err_log "RCLCLO ERR: $?" +else + info_log "RCLCLO Radio-Cloning übersprungen (Testlauf)" +fi + +########### 4 Hörbücher ############# +info_log 'RCLCLO Hörbücher...' +if [ $testlauf = "ja" ] +then + buchverz="A" + info_log "RCLCLO Radio-Cloning Hörbücher-Verzeichnisse: $buchverz (Testlauf)" +else + buchverz="A B C D E F G H I J K L M N O P Q R S SCH T" + info_log "RCLCLO Radio-Cloning Hörbücher-Verzeichnisse: $buchverz" +fi + +for bbuch in $buchverz; do + info_log "RCLCLO Buchstabe: $bbuch" + rclone sync -P /srv/MEDIEN/Audio/Hörbücher/A-Z/$bbuch/ jotta:/Audio/Hörbücher/A-Z/$bbuch/ --log-file=$logbuch --backup-dir=jotta:/Archiv/Audio/$AArchiv/Hörbücher/$bbuch/ + err_log "RCLCLO ERR: $?" + echo " " +done + +echo " " +echo " " + + +######### 5 Musik ############## + +if [ $testlauf = "nein" ] +then + info_log "RCLCLO Musik" + rclone sync -P /srv/MEDIEN/Audio/Musik/ jottasecret:/Audio/Musik/ --log-file=$logbuch --backup-dir jottasecret:/Archiv/Audio/$AArchiv/Musik/ +else + info_log "RCLCLO Musik-Cloning übersprungen (Testlauf)" +fi + +echo " " +echo " " + + +############ 6 Bilder ############### + +if [ $testlauf = "ja" ] +then + info_log "RCLCLO Testlauf: Bilder Alf übersprungen" +else + info_log "RCLCLO Alfs Bilder... Jahrgang: $jjahr" + rclone sync -P /srv/MEDIEN/Bilder/Alf/$jjahr/ jottasecret:/Bilder/Alf/$jjahr/ --log-file=$logbuch --backup-dir jottasecret:/Archiv/Bilder/$AArchiv/Alf/$jjahr/ --ignore-existing + err_log "RCLCLO ERR: $?" + echo " " + echo " " + /bin/bash /root/louisabackup.sh + +fi + +info_log 'RCLCLO Fertig!' + +############### 7 OMV-Sync 2000 ####################### + +info_log "R2000 OMV-Sychronisierung..." +info_log "R2000 Disk auf OMV2000 eingehängt?" + +# SSH-Verbindungsinformationen +SSH_USER="root" # Dein Benutzername auf dem Remote-Server +SSH_HOST="100.87.87.81" # Die IP-Adresse oder der Hostname des Remote-Servers + +# Das Verzeichnis auf dem Remote-Server, das der Entschlüsselungs-Mount-Point ist +REMOTE_DECRYPTED_DIR="/srv/dev-disk-by-uuid-13cadd43-4179-427d-a0bd-3bc17596b05f" # z.B. /mnt/mydata_decrypted +info_log "R2000 Prüfe, ob '$REMOTE_DECRYPTED_DIR' auf $SSH_HOST entschlüsselt ist..." + +# Führe 'mountpoint -q' auf dem Remote-Server aus +ssh -p2222 -i /root/Schluessel/id_rclone "$SSH_USER@$SSH_HOST" "mountpoint -q \"$REMOTE_DECRYPTED_DIR\"" + +# Überprüfe den Exit-Status des Remote-Befehls +if [ $? -eq 0 ]; then + info_log "R2000 Erfolg: Das Verzeichnis '$REMOTE_DECRYPTED_DIR' auf $SSH_HOST ist entschlüsselt (gemountet)." +else + err_log "R2000 Fehler: Das Verzeichnis '$REMOTE_DECRYPTED_DIR' auf $SSH_HOST ist NICHT entschlüsselt (nicht gemountet)." + err_log "R2000 Bitte entschlüsseln Sie es auf dem Server." + exit 1 # Das Skript mit einem Fehlercode beenden +fi + +# rsync -r -u -P --delete -e "ssh -p2222 -i /root/id_OMV81" /srv/dev-disk-by-uuid-cdd3de56-0b4f-48cf-aec0-abf441a759b5/ root@100.87.87.81:/srv/dev-disk-by-uuid-13cadd43-4179-427d-a0bd-3bc17596b05f/ --exclude=.Trash-1000/ + +rsync -r -u -P -e "ssh -p2222 -i /root/Schluessel/id_rclone" /srv/dev-disk-by-uuid-cdd3de56-0b4f-48cf-aec0-abf441a759b5/ root@100.87.87.81:/srv/dev-disk-by-uuid-13cadd43-4179-427d-a0bd-3bc17596b05f/ --exclude=.Trash-1000/ --log-file=$logfile +