# SSH, Bash & rsync unter Windows (Git Bash / MINGW64) ## Voraussetzungen - **Git for Windows** installiert (enthält Git Bash mit MINGW64) - Zielserver: Windows Server mit OpenSSH-Server --- ## 1. SSH-Key erstellen ```bash ssh-keygen -t ed25519 ``` Key-Dateien liegen danach unter `C:\Users\\.ssh\`: - `id_ed25519` (privat, niemals weitergeben) - `id_ed25519.pub` (öffentlich, wird auf Server kopiert) --- ## 2. SSH-Key auf Windows-Server einrichten ### Warum `ssh-copy-id` allein nicht reicht `ssh-copy-id` kopiert den Key nach `~/.ssh/authorized_keys` auf dem Server. **Windows OpenSSH ignoriert diese Datei für Benutzer in der Administratoren-Gruppe.** Stattdessen muss der Key in eine zentrale Datei: ``` C:\ProgramData\ssh\administrators_authorized_keys ``` ### Schritt-für-Schritt 1. **Public Key anzeigen** (lokal in Git Bash): ```bash cat ~/.ssh/id_ed25519.pub ``` 2. **Auf dem Server** (PowerShell als Administrator): ```powershell # Key eintragen (Inhalt aus Schritt 1 einsetzen) Add-Content C:\ProgramData\ssh\administrators_authorized_keys "ssh-ed25519 AAAA... user@host" # Berechtigungen setzen (MUSS exakt stimmen!) icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "SYSTEM:(F)" /grant "BUILTIN\Administrators:(F)" ``` > **Wichtig:** Stimmen die Berechtigungen nicht, ignoriert OpenSSH die Datei stillschweigend und fragt weiter nach dem Passwort. 3. **Testen** (lokal): ```bash ssh domadmin@krah-mgmt10.internal.lan echo ok ``` Wenn `ok` ohne Passwort erscheint, ist alles korrekt. ### Alternative: Server so konfigurieren, dass `~/.ssh/authorized_keys` auch für Admins gilt In `C:\ProgramData\ssh\sshd_config` diese Zeilen auskommentieren: ``` # Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys ``` Danach SSH-Dienst neu starten: ```powershell Restart-Service sshd ``` --- ## 3. rsync in Git Bash installieren Git Bash enthält kein `rsync`. Die Binary muss manuell aus dem Git-for-Windows-SDK nachinstalliert werden. ### Git Bash als Administrator öffnen Notwendig, da Git unter `C:\Program Files\Git\` installiert ist. ### Binaries herunterladen ```bash curl -L https://github.com/git-for-windows/git-sdk-64/raw/main/usr/bin/rsync.exe -o /usr/bin/rsync.execurl -L https://github.com/git-for-windows/git-sdk-64/raw/main/usr/bin/msys-xxhash-0.dll -o /usr/bin/msys-xxhash-0.dll ``` ### Prüfen ```bash rsync --version ``` > **Hinweis:** Falls weitere DLL-Fehler auftreten (`msys-*.dll`), die fehlende DLL analog von derselben GitHub-Quelle herunterladen. --- ## 4. Bekannte Fallstricke | Problem | Ursache | Lösung | |---|---|---| | `mux_client_request_session: read from master failed` | SSH-Multiplexing (ControlMaster) funktioniert nicht unter MINGW64 | Kein `-S`/`-M`/ControlPath in SSH-Befehlen verwenden | | Passwort wird trotz Key verlangt | Admin-Keys werden unter Windows an anderem Ort erwartet | Key in `administrators_authorized_keys` eintragen (siehe Abschnitt 2) | | `rsync: command not found` | Nicht in Git Bash enthalten | Manuell installieren (siehe Abschnitt 3) | | `error while loading shared libraries: msys-xxhash-0.dll` | rsync braucht zusätzliche DLL | DLL separat herunterladen | | `Permission denied` beim Schreiben nach `/usr/bin/` | Git Bash ohne Admin-Rechte gestartet | Git Bash als Administrator öffnen | | `$'\302\226curl': command not found` | Unsichtbare Unicode-Zeichen aus Copy-Paste | Befehl manuell eintippen statt einfügen |