Compare commits
23 Commits
0b05112d36
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a6920c5a27 | |||
| 252da4cc76 | |||
| 9c3fb71f98 | |||
| 15cf1dd22b | |||
| fd2989d438 | |||
| f5bc23801b | |||
| ad8862a479 | |||
| 805902ca3d | |||
| 2006178a48 | |||
| 64b809c7e5 | |||
| bd60a23f92 | |||
| 0da8269097 | |||
| a09e7bc912 | |||
| 783f26102d | |||
| 5efa222aec | |||
| 209648e346 | |||
| 2f9b5d43a2 | |||
| 9365f7622a | |||
| b4eb2a54d2 | |||
| 3102a9fc76 | |||
| 2b2a0434ab | |||
| 18c207b771 | |||
| 63ac5b74d1 |
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/
|
||||||
|
|||||||
14
README.md
14
README.md
@ -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,8 +53,14 @@ 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
|
||||||
|
|
||||||
3. CA-VM korrekt konfigurieren (privater CA-Key, `remote_sign.sh`)
|
3. CA-VM korrekt konfigurieren (privater CA-Key, `remote_sign.sh`)
|
||||||
|
|||||||
@ -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}"
|
|
||||||
}
|
|
||||||
@ -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"
|
|
||||||
126
login.sh
Normal file → Executable file
126
login.sh
Normal file → Executable 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_USER=$(gum input --placeholder "SSH Benutzername")
|
ssh ssh-test90969@wralto.org
|
||||||
fi
|
log_info "Nextcloud3 fertig. ERR: $?"
|
||||||
log_info "Verwendeter Benutzer: $SSH_USER"
|
;;
|
||||||
|
|
||||||
|
"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)"
|
||||||
|
|
||||||
# Gültigkeit wählen
|
TARGET_PORT=$(gum input --placeholder "Ziel SSH Port" --value "2222")
|
||||||
VALIDITY_OPTIONS=("300" "600" "1800" "3600") # Sekunden
|
log_info "SSH-Port: $TARGET_PORT"
|
||||||
VALIDITY=$(gum choose --header "Gültigkeitsdauer des Zertifikats wählen (Sekunden)" "${VALIDITY_OPTIONS[@]}")
|
|
||||||
log_info "Zertifikatsgültigkeit: $VALIDITY Sekunden"
|
|
||||||
|
|
||||||
# Schlüssel vorbereiten
|
# Benutzer-Auswahl
|
||||||
mkdir -p "$KEY_DIR"
|
USER_CHOICES=("alf" "root" "oberkoetter" "Benutzer manuell eingeben")
|
||||||
cd "$KEY_DIR"
|
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"
|
||||||
|
|
||||||
log_info "Prüfe auf vorhandene temporäre Schlüssel"
|
# Gültigkeit wählen
|
||||||
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
|
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"
|
||||||
|
|
||||||
log_info "Generiere temporären SSH-Key"
|
# Schlüssel vorbereiten
|
||||||
ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
|
mkdir -p "$KEY_DIR"
|
||||||
|
cd "$KEY_DIR"
|
||||||
|
|
||||||
log_info "Sende Public Key zur CA (${CA_HOST})"
|
log_info "Prüfe auf vorhandene temporäre Schlüssel"
|
||||||
scp -P "$CA_PORT" -i "$CA_KEY_PATH" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || {
|
rm -f "$KEY_NAME" "$KEY_NAME.pub" "$KEY_NAME-cert.pub"
|
||||||
log_error "Fehler beim Senden des Public Keys zur CA"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info "Fordere Signatur von CA an..."
|
log_info "Generiere temporären SSH-Key"
|
||||||
ssh -i "$CA_KEY_PATH" -p "$CA_PORT" "${CA_USER}@${CA_HOST}" "$REMOTE_SIGN_SCRIPT /tmp/${KEY_NAME}.pub $SSH_USER $VALIDITY" || {
|
ssh-keygen -f "$KEY_NAME" -N "" -C "$SSH_USER@temp" > /dev/null
|
||||||
log_error "Fehler bei der Signierung durch die CA"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info "Lade signiertes Zertifikat von CA"
|
log_info "Sende Public Key zur CA (${CA_HOST})"
|
||||||
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" "${KEY_NAME}.pub" "${CA_USER}@${CA_HOST}:/tmp/" || {
|
||||||
log_error "Fehler beim Abrufen des Zertifikats von der CA"
|
log_error "Fehler beim Senden des Public Keys zur CA"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
log_info "Zertifikat erfolgreich erhalten – starte SSH-Verbindung"
|
log_info "Fordere Signatur von CA an..."
|
||||||
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
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 -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 – starte SSH-Verbindung"
|
||||||
|
ssh -p "$TARGET_PORT" -i "$KEY_NAME" "$SSH_USER@$TARGET_HOST"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
log_end "SSH-Login abgeschlossen"
|
log_end "SSH-Login abgeschlossen"
|
||||||
|
|||||||
Reference in New Issue
Block a user