Ist es möglich, bei Verwendung von rsync einen anderen ssh-Port anzugeben?


366

Ich habe den folgenden Befehl versucht:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

SSH wird auf Port 2222 ausgeführt, aber rsync versucht immer noch, Port 22 zu verwenden, und beschwert sich dann darüber, dass der Pfad nicht gefunden wurde, da er natürlich nicht vorhanden ist.

Ich würde gerne wissen, ob es möglich ist, mit einem Remote-Host auf einem nicht standardmäßigen SSH-Port zu synchronisieren.

Antworten:


136

Eine andere Option ist, auf dem Host, von dem aus Sie rsync ausführen, den Port in der ssh-Konfigurationsdatei festzulegen, dh:

cat ~/.ssh/config
Host host
    Port 2222

Dann spricht rsync over ssh mit Port 2222:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

21
Obwohl dies nicht die offensichtlichste Antwort ist, ist es dennoch eine sehr gute Antwort. Es lohnt sich, die SSH-Konfiguration für jeden Host zu verwenden, mit dem Sie mehr als ein- oder zweimal eine Verbindung herstellen, da Sie dadurch viel nachdenken und tippen müssen.
John Hunt

5
Um fair zu sein, ist der Nachteil, dass es unsichtbar wird, dh nach einer Weile könnte man vergessen, dass es in der ssh-Konfigurationsdatei enthalten ist und nicht versteht, wie es funktioniert, oder einer Ihrer Kollegen könnte den Befehl kopieren / einfügen und nicht verstehen, warum es funktioniert nicht in ihrem Konto. Ich persönlich bevorzuge es jedoch, nicht immer die Portnummer eingeben zu müssen.
Joao Costa

1
Das ist schrecklich. Es ist völlig inkompatibel mit Port-NATing. es sei denn, Sie möchten mehrere DNS-Namen für dieselbe IP-Adresse haben, was ein Wartungsproblem darstellt
Meffect

1
@melfect Machst du Witze? Ich würde es nicht so schrecklich nennen, wie ich es das Beste nennen würde, was jemals für jemanden gemacht wurde, der rsyncviele Male an einen seltsamen Port muss, aber jedes Mal ist es gerade so weit verteilt, dass man die Syntax vergisst.
Freedom_Ben

1
Dies erleichtert Ihnen zwar die Verbindung, macht es aber auch Hackern leichter, und Ihr auth.log wird erneut mit automatisierten Versuchen überfüllt sein. Es macht also den Punkt des Portwechsels irgendwie ungültig.
Forthrin

625

Ihre Befehlszeile sollte folgendermaßen aussehen:

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

Dies funktioniert einwandfrei. Ich verwende es ständig, ohne dass neue Firewall-Regeln erforderlich sind. Beachten Sie nur, dass der SSH-Befehl selbst in Anführungszeichen gesetzt ist.


8
Ich frage mich, warum es so ist - es ist ein so offensichtliches Bedürfnis, das immer noch ziemlich verborgen ist, da dies effektiv einen Alias ​​für die ssh-Binärdatei erzeugt. (Es hat aber einwandfrei funktioniert)
jsbueno

1
Arbeitet mit Doppelpunktsymboluser@host:/path
DmitrySandalov

23
Der Hauptteil des Befehls ist -e 'ssh -p 2222', sodass Sie ihn mit verschiedenen rsync-Parametern verwenden können
Evan Donovan

2
Beachten Sie, dass Sie, wenn Sie einen SSH-Schlüssel angeben müssen, dies wie -e 'ssh -i mykey -p 2222'
tun können

9
Warum - entfernte-gesendete Dateien? Wenn es gefährlich für die Quelldaten ist, erwähnen Sie es besser ...
Tiw

14

Wenn Sie Dateien über einen bestimmten SSH-Port senden müssen:

rsync -azP -e "ssh -p PORT_NUMBER" source destination

Beispiel

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination

3
und was genau trägt dies zur bestehenden Antwort bei?
Chris Maes

Schauen Sie sich das Format und das Beispiel an. Ich habe die Dinge hier vereinfacht.
Techie

4
OK, Sie haben zwei optionale Optionen entfernt, aber im Wesentlichen ist Ihre Antwort genau die gleiche wie die akzeptierte ...
Chris Maes

2
Es ist einfacher und formatierter. Für neue Lernende leichter zu verstehen. Übrigens danke für die grundlose Abstimmung
Techie


2

Ein bisschen offtopic, könnte aber jemandem helfen. Wenn Sie Passwort und Port übergeben müssen, empfehle ich die Verwendung von sshpasspackage. Der Befehlszeilenbefehl würde folgendermaßen aussehen: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


Dies funktioniert nicht, da die Tastatur interaktiv mit dem Datenstrom in Konflikt gerät und das Protokoll beschädigt.
Evi1M4chine

2

Ich habe diese Lösung auf der Website von Mike Hike Hostetler gefunden , die perfekt für mich funktioniert hat.

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

3
und was genau trägt dies zur bestehenden Antwort bei?
Chris Maes

Schön funktioniert perfekt. Danke :)
Sammu Sundar

2

Die richtige Syntax besteht darin, Rsync anzuweisen, einen benutzerdefinierten SSH-Befehl zu verwenden (Hinzufügen von -p 2222), der mithilfe von SSH einen sicheren Tunnel zur Remote-Seite erstellt und dann über localhost: 873 eine Verbindung herstellt

rsync -rvz --progress --remove-sent-files -e "ssh -p 2222" ./dir user @ host / path

Rsync wird als Daemon auf dem TCP-Port 873 ausgeführt, der nicht sicher ist.

Von Rsync Mann:

Push: rsync [OPTION ...] SRC ... [USER @] HOST: DEST

Was die Leute irreführt, dies zu versuchen:

rsync -rvz --progress --remove-sent-files ./dir user @ host: 2222 / path

Dies weist es jedoch an, eine Verbindung zum Rsync- Dämon auf Port 2222 herzustellen, der nicht vorhanden ist.


Andere Antworten erwähnten Port 873
Kevinf

Die Frage war, wie es als SSH über Port 2222 ausgeführt werden kann. ob rsync es erfordert oder nicht, ist eine andere Geschichte.
Dan Steingart

@DanSteingart Ich habe die Antwort aktualisiert. Hilft sie jetzt mehr?
Kevinf

-3

Ich konnte rsync nicht dazu bringen, eine Verbindung über ssh an einem anderen Port herzustellen, aber ich konnte die ssh-Verbindung über iptables auf den gewünschten Computer umleiten. Dies ist nicht die Lösung, nach der ich gesucht habe, aber sie hat mein Problem gelöst.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.