Est-il possible de spécifier un port ssh différent lors de l'utilisation de rsync?

366

J'ai essayé la commande suivante:

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

SSH s'exécute sur le port 2222, mais rsync essaie toujours d'utiliser le port 22 et se plaint ensuite de ne pas trouver le chemin d'accès, car il n'existe bien sûr pas.

Je voudrais savoir s'il est possible de rsync à un hôte distant sur un port ssh non standard.

Ketema
la source

Réponses:

136

Une autre option, dans l'hôte à partir duquel vous exécutez rsync, définit le port dans le fichier de configuration ssh, c'est-à-dire:

cat ~/.ssh/config
Host host
    Port 2222

Ensuite, rsync sur ssh parlera au port 2222:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path
Joao Costa
la source
21
Bien que ce ne soit pas la réponse la plus évidente, c'est toujours une très bonne réponse. Cela vaut la peine d'utiliser la configuration SSH pour tout hôte auquel vous vous connectez plus d'une ou deux fois, car cela vous fera économiser beaucoup de réflexion et de frappe.
John Hunt
5
En effet, bien que pour être juste, l'inconvénient est qu'elle devient invisible, c'est-à-dire qu'au bout d'un moment, on pourrait oublier qu'elle se trouve dans le fichier de configuration ssh et ne pas comprendre comment cela fonctionne, ou l'un de vos collègues pourrait copier / coller la commande et ne pas comprendre pourquoi. cela ne fonctionne pas dans leur compte. Pourtant, personnellement, je préfère ne pas avoir à taper le numéro de port tout le temps.
Joao Costa
1
C'est horrible. son complètement incompatible avec le port NATing. sauf si vous voulez avoir plusieurs noms DNS pour la même adresse IP, ce qui est un problème de maintenance
meffect
1
@melfect Vous plaisantez? Je ne dirais pas que c'est horrible autant que je dirais que c'est la meilleure chose qui soit pour quelqu'un qui a besoin rsyncd'un port étrange à plusieurs reprises, mais à chaque fois, il est réparti juste assez pour oublier la syntaxe.
Freedom_Ben
1
Bien que cela vous facilite la connexion, cela facilite également la tâche des pirates et votre auth.log sera à nouveau submergé de tentatives automatisées. Donc, cela annule en quelque sorte le point de changer de port.
2018
625

Votre ligne de commande devrait ressembler à ceci:

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

cela fonctionne bien - je l'utilise tout le temps sans avoir besoin de nouvelles règles de pare-feu - notez simplement que la commande SSH elle-même est placée entre guillemets.

klapa
la source
8
Je me demande pourquoi il en est ainsi - c'est un besoin si évident, encore assez caché, car cela crée effectivement un alias au binaire ssh. (Cela a fonctionné parfaitement, cependant)
jsbueno
1
Fonctionne avec le symbole du côlonuser@host:/path
DmitrySandalov
23
l'élément clé de la commande est -e 'ssh -p 2222' afin que vous puissiez l'utiliser avec différents paramètres rsync
Evan Donovan
2
Notez que si vous devez spécifier une clé ssh, vous pouvez le faire comme -e 'ssh -i mykey -p 2222'
dranxo
9
pourquoi --remove-sent-files? Si c'est dangereux pour les données sources, mieux vaut le mentionner ...
Tiw
14

lorsque vous devez envoyer des fichiers via un port SSH spécifique:

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

exemple

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination
Techie
la source
3
et qu'est-ce que cela ajoute exactement à la réponse existante?
Chris Maes
regardez le format et et l'exemple. J'ai simplifié les choses ici.
Techie
4
OK, vous avez supprimé deux options facultatives, mais en substance, votre réponse est exactement la même que celle acceptée ...
Chris Maes
2
C'est plus simplifié et formaté. Plus facile à comprendre pour les nouveaux apprenants. Soit dit en passant, merci pour le vote négatif sans raison
Techie
2

Un peu hors sujet mais pourrait aider quelqu'un. Si vous avez besoin de passer un mot de passe et un port, je suggère d'utiliser le sshpasspackage. La commande de ligne de commande ressemblerait à ceci: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' [email protected]:/dir_on_host/

Tomas
la source
Cela ne fonctionne pas car le clavier interagit avec le flux de données, corrompant le protocole.
Evi1M4chine
2

J'ai trouvé cette solution sur le site de Mike Hike Hostetler qui fonctionnait parfaitement pour moi.

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/
Rusty1
la source
3
et qu'est-ce que cela ajoute exactement à la réponse existante?
Chris Maes
Nice on fonctionne parfaitement. Merci :)
Sammu Sundar
2

La syntaxe correcte consiste à dire à Rsync d'utiliser une commande SSH personnalisée (en ajoutant -p 2222), qui crée un tunnel sécurisé vers le côté distant à l'aide de SSH, puis se connecte via localhost: 873

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

Rsync s'exécute en tant que démon sur le port TCP 873, qui n'est pas sécurisé.

De l'homme Rsync:

Push: rsync [OPTION ...] SRC ... [USER @] HÔTE: DEST

Ce qui induit les gens en erreur:

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

Cependant, cela lui demande de se connecter au démon Rsync sur le port 2222, qui n'est pas là.

kevinf
la source
les autres réponses n'ont pas mentionné le port 873
kevinf
la question était de savoir comment le faire fonctionner en tant que ssh sur le port 2222; que rsync l'exige ou non, c'est une autre histoire.
Dan Steingart
@DanSteingart J'ai mis à jour la réponse, cela aide-t-il plus maintenant?
kevinf
-3

Je n'ai pas pu obtenir rsync pour se connecter via ssh sur un port différent, mais j'ai pu rediriger la connexion ssh vers l'ordinateur que je voulais via iptables. Ce n'est pas la solution que je cherchais, mais cela a résolu mon problème.

Ketema
la source