Compare commits

..

23 Commits

Author SHA1 Message Date
alf
a6920c5a27 README.md aktualisiert 2026-03-03 19:48:07 +00:00
alf
252da4cc76 login.sh aktualisiert 2025-11-23 12:47:49 +00:00
alf
9c3fb71f98 login.sh aktualisiert 2025-11-23 12:43:37 +00:00
alf
15cf1dd22b login.sh aktualisiert 2025-11-23 12:42:09 +00:00
alf
fd2989d438 login.sh aktualisiert 2025-11-23 12:12:29 +00:00
alf
f5bc23801b login.sh aktualisiert
Unterscheidung zwischen Servern, die nur mittel PublicKey und solchen, die mit zertifizierten PublicKeys verbunden werden. Die Unterscheidung findet in Zeile 83 statt. Server, die hier eingetragen sind, werden nur mit dem PublicKey, dessen Pfad in Zeile 27 ("SIMPLE_KEY") angegeben ist, verbunden.
2025-11-17 15:15:32 +00:00
alf
ad8862a479 README.md aktualisiert 2025-10-16 20:20:07 +00:00
alf
805902ca3d login.sh aktualisiert 2025-09-12 06:21:47 +00:00
alf
2006178a48 log/logging.sh gelöscht 2025-09-04 11:48:08 +00:00
alf
64b809c7e5 .gitignore aktualisiert 2025-09-04 11:47:25 +00:00
alf
bd60a23f92 rclonecloner.sh gelöscht 2025-09-04 11:47:02 +00:00
alf
0da8269097 login.sh aktualisiert 2025-09-04 11:38:21 +00:00
alf
a09e7bc912 Merge pull request 'login.sh aktualisiert' (#1) from port222aufca into main
Reviewed-on: #1
2025-09-04 11:37:35 +00:00
alf
783f26102d login.sh aktualisiert 2025-09-04 10:56:28 +00:00
alf
5efa222aec login.sh aktualisiert
Logging korritigiert
2025-09-04 10:38:12 +00:00
alf
209648e346 login.sh aktualisiert 2025-09-04 09:55:50 +00:00
alf
2f9b5d43a2 login.sh aktualisiert
Server3 hinzugefügt.
2025-09-04 09:52:38 +00:00
alf
9365f7622a README.md aktualisiert 2025-08-29 07:39:00 +00:00
alf
b4eb2a54d2 login.sh aktualisiert
Logger berichtigt
2025-08-15 16:38:51 +00:00
Alf
3102a9fc76 2025-07-30-2 2025-07-30 11:03:05 +02:00
Alf
2b2a0434ab 2025-07-30 2025-07-30 11:00:23 +02:00
Alf
18c207b771 Nach Konflikt 2025-07-29 16:00:24 +02:00
Alf
63ac5b74d1 Abgleich 2025-07-29 2025-07-29 15:53:11 +02:00
6 changed files with 89 additions and 107 deletions

3
.gitignore vendored
View File

@ -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/

View File

@ -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.
@ -53,7 +53,13 @@ Falls die Datei nicht vorhanden ist, bricht das Skript mit einer Fehlermeldung a
## Installation ## Installation
1. `gum` installieren (z.B. via `brew install gum` oder Snap/Paketmanager) 1. `gum` installieren:
```bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install gum
```
2. Alle Skripte und Verzeichnisse in ein Git-Repository klonen oder kopieren 2. Alle Skripte und Verzeichnisse in ein Git-Repository klonen oder kopieren

View File

View File

@ -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}"
}

View File

@ -1,21 +0,0 @@
#!/bin/bash
# Setze Arbeitsverzeichnis
# cd /home/oberkoetter/Dokumente/Git/rettedpv || exit 1
# Pfade definieren
CONFIG="./logrotate.cfg"
STATUS="./logrotate.status"
LOGFILE="./log.txt"
# Prüfe, ob Konfigurationsdatei existiert
if [[ ! -f "$CONFIG" ]]; then
echo "$(date) - Fehler: Konfigurationsdatei '$CONFIG' nicht gefunden." >> "$LOGFILE"
exit 2
fi
# Logrotate ausführen (forcierter Lauf)
logrotate -s "$STATUS" -f "$CONFIG"
# Erfolgs-Log schreiben
echo "$(date) - Logrotate wurde erfolgreich ausgeführt." >> "$LOGFILE"

112
login.sh Normal file → Executable file
View File

@ -1,5 +1,12 @@
#!/bin/bash #!/bin/bash
set -e set -e
GIT_PFAD="$HOME/Gitea"
source $GIT_PFAD/logger/logger.sh
LOGBUCH="$GIT_PFAD/logger/Logs/ssh-login.log"
log_init "$LOGBUCH"
log_start
log_info "Starte sshlogin…"
# Farben # Farben
GREEN='\033[0;32m' GREEN='\033[0;32m'
@ -13,19 +20,11 @@ CA_KEY_PATH="$HOME/.ssh/id_ca"
# Config # Config
CA_HOST="100.87.87.5" CA_HOST="100.87.87.5"
CA_USER="alf" CA_USER="alf"
CA_PORT=22 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"
LOG_DIR="$HOME/Gitea/ssh-cert-login/log" 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.
LOG_SCRIPT="${LOG_DIR}/logging.sh"
LOG_FILE="${LOG_DIR}/ssh-cert-login.log"
# 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 # Prüfen, ob der CA-Schlüssel vorhanden ist
if [[ ! -f "$CA_KEY_PATH" ]]; then if [[ ! -f "$CA_KEY_PATH" ]]; then
@ -42,65 +41,94 @@ 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"
["Server3"]="100.87.87.103"
["ABS"]="100.87.87.102" ["ABS"]="100.87.87.102"
["OMVPi"]="100.87.87.80" ["OMVPi"]="100.87.87.80"
["OMV2000"]="100.87.87.81" ["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" ["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[@]}")
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"
# Benutzer-Auswahl # Hier unterscheiden zwischen Servern, die mittels einfachem PublicKey-Verfahren und solchen, die per zertifiziertem Schlüssel angesteuert werden.
USER_CHOICES=("alf" "root" "oberkoetter" "Benutzer manuell eingeben") case $TARGET_LABEL in
SSH_USER=$(gum choose --header "SSH-Benutzer wählen" "${USER_CHOICES[@]}") "Nextcloud Alf")
if [[ "$SSH_USER" == "Benutzer manuell eingeben" ]]; then 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]}"
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"
# 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") SSH_USER=$(gum input --placeholder "SSH Benutzername")
fi fi
log_info "Verwendeter Benutzer: $SSH_USER" log_info "Verwendeter Benutzer: $SSH_USER"
# Gültigkeit wählen # Gültigkeit wählen
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen (Sekunden)" "${VALIDITY_OPTIONS[@]}") VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen (Sekunden)" "${VALIDITY_OPTIONS[@]}")
log_info "Zertifikatsgültigkeit: $VALIDITY Sekunden" log_info "Zertifikatsgültigkeit: $VALIDITY Sekunden"
# Schlüssel vorbereiten # Schlüssel vorbereiten
mkdir -p "$KEY_DIR" mkdir -p "$KEY_DIR"
cd "$KEY_DIR" cd "$KEY_DIR"
log_info "Prüfe auf vorhandene temporäre Schlüssel" log_info "Prüfe auf vorhandene temporäre Schlüssel"
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub" 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 ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
log_info "Sende Public Key zur CA (${CA_HOST})" 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/" || { 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" log_error "Fehler beim Senden des Public Keys zur CA"
exit 1 exit 1
} }
log_info "Fordere Signatur von CA an..." log_info "Fordere Signatur von CA an..."
ssh -i "$CA_KEY_PATH" -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" log_error "Fehler bei der Signierung durch die CA"
exit 1 exit 1
} }
log_info "Lade signiertes Zertifikat von CA" log_info "Lade signiertes Zertifikat von CA"
scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${CA_USER}@${CA_HOST}:/tmp/${KEY_NAME}-cert.pub" . || { 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" log_error "Fehler beim Abrufen des Zertifikats von der CA"
exit 1 exit 1
} }
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"