103 lines
3.6 KiB
Markdown
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 | |