diff --git a/Linux/SSH/README.md b/Linux/SSH/README.md index 17941d1..ca27dd6 100644 --- a/Linux/SSH/README.md +++ b/Linux/SSH/README.md @@ -1,4 +1,18 @@ -# Erstellen einer sicheren SSH Anmeldung +# Erstellen einer sicheren SSH-Anmeldung + +Dieses Skript richtet OpenSSH mit sicheren Einstellungen ein und erstellt bei Bedarf Benutzer mit SSH-Zugriff. +Es stellt sicher, dass `sudo` und der `OpenSSH-Server` installiert sind und generiert sichere Host-Schlüssel (Ed25519). +Das Skript erlaubt es, SSH-Zugriff nur für bestimmte Benutzer zu konfigurieren. + +--- + +## Anforderungen +- AlmaLinux, Debian, Ubuntu oder Alpine Linux +- Root- oder `sudo`-Rechte + +--- + +## Skript: Secure SSH Setup ```bash #!/bin/bash @@ -51,17 +65,22 @@ install_package() { local package=$1 local cmd=$2 warn "Installiere $package..." - ( $cmd &> /dev/null ) 2>&1 & # Ausgaben vollständig unterdrücken - disown # Prozess von der Shell trennen, keine Ausgabe von [1] 3562 + + mkfifo /tmp/spinner_pipe 2>/dev/null + $cmd &> /tmp/spinner_pipe & # Prozess läuft im Hintergrund local pid=$! - spinner $pid + disown $pid # Entfernt Jobsteuerung, kein [1] 3562 + spinner $pid < /tmp/spinner_pipe & wait $pid + if [ $? -eq 0 ]; then log "$package wurde erfolgreich installiert." else error "Fehler bei der Installation von $package." exit 1 fi + + rm -f /tmp/spinner_pipe } # Überprüfe und installiere sudo, falls nicht vorhanden @@ -103,82 +122,20 @@ fi # Generiere fehlende Host-Schlüssel (Ed25519) if [ ! -f "$ED25519_KEY" ]; then warn "Host-Schlüssel fehlt. Generiere ssh_host_ed25519_key..." - ( sudo ssh-keygen -t ed25519 -f $ED25519_KEY -N "" &> /dev/null ) 2>&1 & - spinner $! + + mkfifo /tmp/keygen_pipe 2>/dev/null + ( sudo ssh-keygen -t ed25519 -f $ED25519_KEY -N "" &> /tmp/keygen_pipe ) & + local pid=$! + disown $pid + spinner $pid < /tmp/keygen_pipe & + wait $pid + sudo chown root:root $ED25519_KEY sudo chmod 600 $ED25519_KEY log "Host-Schlüssel ssh_host_ed25519_key wurde erstellt." + + rm -f /tmp/keygen_pipe else log "Host-Schlüssel ssh_host_ed25519_key ist bereits vorhanden." fi - -# SSHD-Konfigurationsverzeichnis sicherstellen und alte Konfigs löschen -warn "Lösche bestehende Konfigurationen in $SSH_CONFIG_DIR ..." -sudo mkdir -p $SSH_CONFIG_DIR -sudo rm -f $SSH_CONFIG_DIR/* - -# Haupt-sshd_config aufräumen und Include setzen -warn "Passe die Haupt-sshd_config an..." - -sudo tee $SSH_MAIN_CONFIG > /dev/null </dev/null; then - log "Benutzer $user existiert." - VALID_USERS+="$user " - else - echo -en "${BLUE}Benutzer ${WHITE}$user${BLUE} existiert nicht. Soll dieser erstellt werden? ${YELLOW}[${WHITE}y/n${YELLOW}]${RESET}: " - read CREATE_USER - if [ "$CREATE_USER" == "y" ]; then - sudo adduser $user - sudo passwd $user - sudo usermod -aG wheel $user - log "Benutzer $user wurde erstellt und zur sudo-Gruppe hinzugefügt." - - # SSH-Verzeichnis und authorized_keys erstellen - sudo mkdir -p /home/$user/.ssh - sudo touch /home/$user/.ssh/authorized_keys - sudo chown -R $user:$user /home/$user/.ssh - sudo chmod 700 /home/$user/.ssh - sudo chmod 600 /home/$user/.ssh/authorized_keys - - echo -en "${BLUE}Möchtest du einen SSH Public Key für ${WHITE}$user${BLUE} hinzufügen? ${YELLOW}[${WHITE}y/n${YELLOW}]${RESET}: " - read ADD_KEY - if [ "$ADD_KEY" == "y" ]; then - echo -en "${BLUE}Füge den SSH Public Key hier ein: ${RESET}" - read SSH_KEY - echo "$SSH_KEY" | sudo tee -a /home/$user/.ssh/authorized_keys - fi - VALID_USERS+="$user " - fi - fi -done - -warn "Erstelle SSH-Konfigurationsdatei..." - -sudo tee $SSH_CONFIG_FILE > /dev/null <