brain/04 Ressourcen/IT/SSH, Bash rsync unter Windo...

103 lines
3.6 KiB
Markdown

# 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\<username>\.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 |