Compare commits
12 Commits
a09e7bc912
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a6920c5a27 | |||
| 252da4cc76 | |||
| 9c3fb71f98 | |||
| 15cf1dd22b | |||
| fd2989d438 | |||
| f5bc23801b | |||
| ad8862a479 | |||
| 805902ca3d | |||
| 2006178a48 | |||
| 64b809c7e5 | |||
| bd60a23f92 | |||
| 0da8269097 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
# Log-Verzeichnis und Dateien (Logdateien nie committen)
|
# Log-Verzeichnis und Dateien (Logdateien nie committen)
|
||||||
log/ssh-cert-login.log
|
log/
|
||||||
|
*.log
|
||||||
|
|
||||||
# Temporäre SSH Keys
|
# Temporäre SSH Keys
|
||||||
temp_keys/
|
temp_keys/
|
||||||
|
|||||||
@ -42,8 +42,8 @@ Dieses Projekt ermöglicht eine einfache und sichere Anmeldung per SSH auf mehre
|
|||||||
|
|
||||||
### Hinweis zur CA-Authentifizierung
|
### Hinweis zur CA-Authentifizierung
|
||||||
|
|
||||||
Das Skript prüft automatisch, ob der SSH-Private-Key `id_ca` (Standardpfad: `~/.ssh/id_ca`) vorhanden ist.
|
Das Skript prüft automatisch, ob der SSH-Private-Key `ca_key.pub` (Standardpfad: `~/.ssh/ca_key.pub`) vorhanden ist.
|
||||||
Dieser Schlüssel wird zur Authentifizierung auf der CA-VM benötigt, um die Signaturanfrage abzusenden.
|
Dieser Schlüssel wird zur Authentifizierung auf der CA-VM benötigt, um die Signaturanfrage abzusenden. Muss lokal per ssh-keygen erstellt und mit ssh-copy-id auf die CA übertragen werden.
|
||||||
|
|
||||||
Falls die Datei nicht vorhanden ist, bricht das Skript mit einer Fehlermeldung ab.
|
Falls die Datei nicht vorhanden ist, bricht das Skript mit einer Fehlermeldung ab.
|
||||||
|
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
DEFAULT_LOG_FILE="./log-default.txt"
|
|
||||||
ACTIVE_LOG_FILE="./log.txt"
|
|
||||||
|
|
||||||
log_init() {
|
|
||||||
ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}"
|
|
||||||
mkdir -p "$(dirname "${ACTIVE_LOG_FILE}")"
|
|
||||||
}
|
|
||||||
|
|
||||||
_log_dual() {
|
|
||||||
local level="$1"
|
|
||||||
local message="$2"
|
|
||||||
local timestamp
|
|
||||||
timestamp="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
||||||
local line="${timestamp} [${level}] ${message}"
|
|
||||||
|
|
||||||
echo "$line" # Konsole
|
|
||||||
echo "$line" >> "${ACTIVE_LOG_FILE}" # Logdatei
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info() { _log_dual "INFO" "$1"; }
|
|
||||||
log_warn() { _log_dual "WARN" "$1"; }
|
|
||||||
log_error() { _log_dual "ERROR" "$1"; }
|
|
||||||
log_start() {
|
|
||||||
echo "" | tee -a "${ACTIVE_LOG_FILE}"
|
|
||||||
_log_dual "START" "--- $1 gestartet ---"
|
|
||||||
}
|
|
||||||
log_end() {
|
|
||||||
_log_dual "END" "--- $1 abgeschlossen ---"
|
|
||||||
echo "" | tee -a "${ACTIVE_LOG_FILE}"
|
|
||||||
}
|
|
||||||
32
login.sh
32
login.sh
@ -1,8 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
source $HOME/Gitea/logger.sh
|
GIT_PFAD="$HOME/Gitea"
|
||||||
|
source $GIT_PFAD/logger/logger.sh
|
||||||
|
|
||||||
LOGBUCH="$HOME/Gitea/ssh-cert-login/log.txt"
|
LOGBUCH="$GIT_PFAD/logger/Logs/ssh-login.log"
|
||||||
log_init "$LOGBUCH"
|
log_init "$LOGBUCH"
|
||||||
log_start
|
log_start
|
||||||
log_info "Starte sshlogin…"
|
log_info "Starte sshlogin…"
|
||||||
@ -23,7 +24,7 @@ CA_PORT=2222
|
|||||||
REMOTE_SIGN_SCRIPT="/home/alf/remote_sign.sh" # Pfad auf der CA-VM, wo das Script zum Signieren zu finden ist
|
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_DIR="./temp_keys"
|
||||||
KEY_NAME="temp_user_key"
|
KEY_NAME="temp_user_key"
|
||||||
|
SIMPLE_KEY="/media/oberkoetter/schluessel1/id_oberkoetter" # Für das einfache Login ohne Zertifikat, aber mit PublicKey. Die Variable gibt die Lage des PubKeys an.
|
||||||
|
|
||||||
# Prüfen, ob der CA-Schlüssel vorhanden ist
|
# Prüfen, ob der CA-Schlüssel vorhanden ist
|
||||||
if [[ ! -f "$CA_KEY_PATH" ]]; then
|
if [[ ! -f "$CA_KEY_PATH" ]]; then
|
||||||
@ -40,6 +41,7 @@ if ! command -v gum &> /dev/null; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Ziel-Host-Auswahl
|
# Ziel-Host-Auswahl
|
||||||
declare -A HOSTS=(
|
declare -A HOSTS=(
|
||||||
["Server1"]="100.87.87.101"
|
["Server1"]="100.87.87.101"
|
||||||
@ -53,9 +55,30 @@ declare -A HOSTS=(
|
|||||||
["PROXI"]="100.87.87.100"
|
["PROXI"]="100.87.87.100"
|
||||||
["MATE3"]="100.87.87.108"
|
["MATE3"]="100.87.87.108"
|
||||||
["PC77"]="100.87.87.77"
|
["PC77"]="100.87.87.77"
|
||||||
|
["Nextcloud PTV"]="cloud.ptv-euregio.de"
|
||||||
|
["Nextcloud Alf"]="wralto.org"
|
||||||
|
["SPZSSH"]="alsdorf.spznord.de"
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}")
|
TARGET_LABEL=$(gum choose --header "Zielsystem wählen" "${!HOSTS[@]}")
|
||||||
|
|
||||||
|
|
||||||
|
# Hier unterscheiden zwischen Servern, die mittels einfachem PublicKey-Verfahren und solchen, die per zertifiziertem Schlüssel angesteuert werden.
|
||||||
|
case $TARGET_LABEL in
|
||||||
|
"Nextcloud Alf")
|
||||||
|
log_info "Einfaches Login Nextcloud3"
|
||||||
|
ssh ssh-test90969@wralto.org
|
||||||
|
log_info "Nextcloud3 fertig. ERR: $?"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Nextcloud PTV" | "SPZSSH")
|
||||||
|
log_info "Einfaches Login mit statischen PublicKey..."
|
||||||
|
TARGET_PORT="22"
|
||||||
|
ssh -p "$TARGET_PORT" -i "$SIMPLE_KEY" "$SSH_USER@$TARGET_HOST"
|
||||||
|
log_info " ERR: $?"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
TARGET_HOST="${HOSTS[$TARGET_LABEL]}"
|
TARGET_HOST="${HOSTS[$TARGET_LABEL]}"
|
||||||
log_info "Zielsystem gewählt: $TARGET_LABEL ($TARGET_HOST)"
|
log_info "Zielsystem gewählt: $TARGET_LABEL ($TARGET_HOST)"
|
||||||
|
|
||||||
@ -105,6 +128,7 @@ scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert
|
|||||||
|
|
||||||
log_info "Zertifikat erfolgreich erhalten – starte SSH-Verbindung"
|
log_info "Zertifikat erfolgreich erhalten – starte SSH-Verbindung"
|
||||||
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
log_end "SSH-Login abgeschlossen"
|
log_end "SSH-Login abgeschlossen"
|
||||||
|
|
||||||
|
|||||||
158
rclonecloner.sh
158
rclonecloner.sh
@ -1,158 +0,0 @@
|
|||||||
########## 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
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user