diff --git a/Linux/SSH/README.md b/Linux/SSH/README.md index a4d282e..7c6f14a 100644 --- a/Linux/SSH/README.md +++ b/Linux/SSH/README.md @@ -17,7 +17,6 @@ Das Skript erlaubt es, SSH-Zugriff nur für bestimmte Benutzer zu konfigurieren. ```bash #!/bin/bash -# Bildschirm löschen (Kompatibel mit Strg+L) printf "\033c" SSH_CONFIG_DIR="/etc/ssh/sshd_config.d" @@ -25,7 +24,6 @@ SSH_MAIN_CONFIG="/etc/ssh/sshd_config" SSH_CONFIG_FILE="$SSH_CONFIG_DIR/secure.conf" ED25519_KEY="/etc/ssh/ssh_host_ed25519_key" -# Farben definieren RED='\033[1;31m' GREEN='\033[1;32m' YELLOW='\033[1;33m' @@ -33,21 +31,6 @@ BLUE='\033[1;34m' WHITE='\033[1;37m' RESET='\033[0m' -# Rotierender Kreis-Spinner -spinner() { - local pid=$1 - local delay=0.1 - local spinstr='|/-\' - while kill -0 $pid 2> /dev/null; do - for i in {0..3}; do - printf " [%c] " "${spinstr:i:1}" - sleep $delay - printf "\b\b\b\b\b\b" - done - done - printf " \b\b\b\b" -} - log() { echo -e "${GREEN}$1${RESET}" } @@ -60,31 +43,18 @@ error() { echo -e "${RED}$1${RESET}" } -# Funktion zur Installation von Paketen mit Spinner install_package() { local package=$1 local cmd=$2 warn "Installiere $package..." - - mkfifo /tmp/spinner_pipe 2>/dev/null - $cmd &> /tmp/spinner_pipe & - pid=$! - disown $pid - cat /tmp/spinner_pipe >/dev/null & - spinner $pid - wait $pid - - if [ $? -eq 0 ]; then + if eval "$cmd" &> /dev/null; 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 if ! command -v sudo &> /dev/null; then warn "sudo ist nicht installiert. Versuche, sudo zu installieren..." @@ -102,7 +72,6 @@ else log "sudo ist bereits installiert." fi -# Installiere OpenSSH-Server, falls nicht vorhanden if ! command -v sshd &> /dev/null; then warn "OpenSSH-Server wird installiert..." @@ -120,32 +89,23 @@ else log "OpenSSH-Server ist bereits installiert." fi -# Generiere fehlende Host-Schlüssel (Ed25519) if [ ! -f "$ED25519_KEY" ]; then warn "Host-Schlüssel fehlt. Generiere ssh_host_ed25519_key..." - - mkfifo /tmp/keygen_pipe 2>/dev/null - ( sudo ssh-keygen -t ed25519 -f $ED25519_KEY -N "" &> /tmp/keygen_pipe ) & - pid=$! - disown $pid - cat /tmp/keygen_pipe >/dev/null & - spinner $pid - 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 + if sudo ssh-keygen -t ed25519 -f "$ED25519_KEY" -N "" &> /dev/null; then + sudo chown root:root "$ED25519_KEY" + sudo chmod 600 "$ED25519_KEY" + log "Host-Schlüssel ssh_host_ed25519_key wurde erstellt." + else + error "Fehler beim Erstellen des Host-Schlüssels." + exit 1 + fi else log "Host-Schlüssel ssh_host_ed25519_key ist bereits vorhanden." fi -# Benutzer abfragen, die sich per SSH anmelden dürfen echo -en "${BLUE}Welche Benutzer dürfen sich per SSH anmelden? (Benutzer durch ${WHITE}Leerzeichen${BLUE} trennen): ${RESET}" read SSH_USERS -# Benutzer verifizieren und ggf. erstellen VALID_USERS="" for user in $SSH_USERS; do if id "$user" &>/dev/null; then @@ -155,33 +115,35 @@ for user in $SSH_USERS; do 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." - - 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 + if sudo adduser "$user" && sudo passwd "$user" && sudo usermod -aG wheel "$user"; then + log "Benutzer $user wurde erstellt und zur sudo-Gruppe hinzugefügt." + 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 &> /dev/null + fi + VALID_USERS+="$user " + else + error "Fehler bei der Erstellung von Benutzer $user." fi - VALID_USERS+="$user " fi fi done -# SSH-Konfigurationsprüfung und Neustart log "Prüfe SSH-Konfiguration..." -sudo sshd -t && sudo systemctl restart sshd -log "SSH-Dienst erfolgreich neu gestartet." +if sudo sshd -t && sudo systemctl restart sshd; then + log "SSH-Dienst erfolgreich neu gestartet." +else + error "Fehler beim Neustart des SSH-Dienstes." + exit 1 +fi log "Setup abgeschlossen! Nur folgende Benutzer dürfen sich per SSH anmelden: ${WHITE}$VALID_USERS" ```