Dateien zwischen Windows Servern transferieren
Ich wollte Dateien von meinem alten Windows Server (2012) auf eine neue Windows Maschine (2016) umziehen und das möglichst von Server zu Server. Nach anfänglichen Versuchen mit FTP bin ich auf eine Möglichkeit gestoßen mit rsync zu arbeiten, was unter Linux auch immer meine favorisierte Variante ist. Für Windows gibt es da die Softwarebibliothek Cygwin.
Beim Aufruf des Setups wählt man als erstes einen Mirror, der quasi als Repository für alle einzelnen Pakete dient, da Cygwin eine kleine Linuxumgebung in Windows emuliert. Dieses Repo wird meist auf dem Desktop abgelegt. Solltet ihr die Standardeinstellung verändern, nicht vergessen beim erneuten Aufruf der Software die Repo-Location zu wählen, da sonst nicht erkannt wird, was bereits installiert ist.
Im nächsten Schritt sucht ihr euch die Pakete, die ihr gern installiert hättet. Um ein Paket zu installieren, auf das Skip Symbol klicken. Damit rsync funktioniert, benötigt man openssh und rsync. Nach Bestätigung und Fertigstellung der Installation habt ihr auf dem Desktop ein Terminal von Cygwin. Damit könnt ihr nun wie auch auf Linux alles bequem von der Konsole aus steuern und die Befehle abschicken – eine Oberfläche dafür gibt es nicht. Die Installation müsst ihr auf beiden Servern ausführen.
Standardmäßig wechselt das Terminal in das Home Verzeichnis des gerade angemeldeten Windows Nutzers. Das ist nicht das selbe wie der eigene Dateien Bereich unter Windows, sondern es liegt wahrscheinlich unter C:\cygwin\home\Nutzer\. Mit
cygrunsrv -h
testet ihr, ob eure Installation richtig funktioniert. Der Aufruf zeigt euch die Hilfeseite des Befehls.
Alter Server
Als erstes generiert ihr auf dem alten Server einen neuen SSH Key ohne Passwort und mit Standardbenennung, damit sich der alte Server auf dem neuen mittels SSH Key bei rsync einloggen kann:
ssh-keygen -t rsa -b 4096 -C "SSH Key alter Server"
Nun zweimal auf Enter drücken, damit id_rsa als Name und kein Passwort gesetzt werden. Nun sollte im Home Verzeichnis ein .ssh Ordner mit id_rsa und id_rsa.pub liegen. Überprüfe es mittels ls -la.
Kopiert den kompletten Inhalt von id_rsa.pub in die Zwischenablage.
Neuer Server
Erstellt auf dem neuen Server im Home Verzeichnis des aktuellen Users (meist C:\cygwin\home\Username\) das Verzeichnis .ssh. In diesem Verzeichnis legt ihr eine Datei mit dem Namen authorized_keys an (wichtig: keine .txt Endung darf vorhanden sein. Ihr könnt in den Anzeige Optionen eures Datei Browser einstellen, dass Dateiendungen angezeigt werden. Dort dann .txt nach Anlegen der Datei entfernen.). In die angelegte Datei kopiert ihr mittels Editor den gerade kopierten Inhalt von id_rsa.pub des alten Servers.
Da mit der Installation der Pakete noch kein SSH-Server auf dem neuen Server läuft, müssen wir diesen als Dienst aktivieren. Auf dem alten Server ist das nicht nötig, da wir uns ja nur in eine Richtung verbinden: von alt zu neu. Wie man einen SSH Server unter Windows mittels Cygwin konfiguriert, fasst dieser Artikel gut zusammen, aber hier nochmal die wichtigsten Eckpunkte:
Terminal öffnen und die Installation kontrollieren:
cygrunsrv -h
Wenn der Befehl wie oben erkannt wird, dann passt alles. Als erstes müssen wir den SSH Server konfigurieren. Dazu geben wir ein:
ssh-host-config
Es tauchen nun mehrere Dialoge auf, die euch zu Ja / Nein Antworten nötigen (siehe auch genaue Beschreibung im verlinkten Artikel):
- Ihr braucht keinen Strict Mode,
- ein neuer lokaler Account sshd soll angelegt werden,
- wir möchten einen Service installieren,
- der Wert für CYGWIN deamon ist binmode ntsec,
- wir erstellen einen privilegierten Account cyg_server und
- geben diesem Account ein Passwort.
Danach sollte alles fertig installiert sein und funktionieren. Nun findet ihr unter den Windows Diensten (Server Manager => Manage => Services) einen neuen Dienst Cygwin SSH. Der muss nun gestartet werden und der Starttype auf automatisch gestellt sein.
Beide Server
Überprüft nun die Firewall Einstellungen auf beiden Servern und legt eine Regel für SSH (Port 22) an, die jeweils von der einen auf die andere IP kommunizieren darf. Diese Regel sollte auf beiden Servern nach Fertigstellung wieder deaktiviert werden.
Alter Server
Um nun die Übertragung zu starten, folgenden Rsync Befehl für die eigenen Zwecke anpassen:
rsync -azP -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" /cygdrive/c/Users/Administrator/Desktop/Verzeichnis/ REMOTE_IP_ADRESSE:/cygdrive/c/Users/Administrator/Desktop/Verzeichnis
Nach …/dev/null” wird als erstes das Ausgangsverzeichnis definiert. Da wir eine Linux-Umgebung emuliert haben, finden wir die Windows Verzeichnisse unter /cygdrive/… Mit einem Leerzeichen wird danach die Ziel IP-Adresse definiert. Nach einem Doppelpunkt folgt das Zielverzeichnis. Hier bietet es sich an, den gleichen Pfad zu wählen, wenn die Dateien auf dem neuen Server an die selbe Stelle sollen.
Jetzt sollte die Übertragung starten. Wenn nicht: überprüfe, ob
- ssh als Windows Dienst läuft oder
- die Firewall Regeln passen.