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

3.6 KiB

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

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):
   cat ~/.ssh/id_ed25519.pub   
  1. Auf dem Server (PowerShell als Administrator):
# 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.

  1. Testen (lokal):
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:

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

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

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