Reputation: 6548
I have been attempting the following command:
rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path
SSH is running on port 2222, but rsync still tries to use port 22 and then complains about not finding the path, cause of course it does not exist.
I would like to know if it is possible to rsync to a remote host on a non-standard ssh port.
Upvotes: 562
Views: 416774
Reputation: 308
Running Linux Ubuntu I use the following command
rsync -rvz --rsh='ssh -p2222' --progress --remove-sent-files ./dir user@host:/path
This passes rsh environmental variable as ssh connection on port 2222. All other methods here seem to not work for my flavor of linux so figured I'd provide others my method.
You can also specify any remote shell you like, either by using the -e command line option, or by setting the RSYNC_RSH environment variable.
Documentation for Rsync: https://download.samba.org/pub/rsync/rsync.1
Upvotes: 14
Reputation: 408
My 2cents, in a single system user you can set the port also on /etc/ssh/ssh_config then rsync will use the port set here
Upvotes: 1
Reputation: 1005
When calling rsync within java (and perhaps other languages), I found that setting
-e ssh -p 22
resulting in rsync complaining it could not execute the binary:
ssh -p 22
because that path ssh -p 22
did not exist (the -p and 22 are no longer arguments for some reason and now make up part of the path to the binary rsync should call).
To workaround this problem I was able to use this environment variable:
export "RSYNC_RSH=ssh -p 2222"
(Programmatically set within java using env.put("RSYNC_RSH", "ssh -p " + port);
)
Upvotes: 4
Reputation: 2929
The correct syntax is to tell Rsync to use a custom SSH command (adding -p 2222), which creates a secure tunnel to remote side using SSH, then connects via localhost:873
rsync -rvz --progress --remove-sent-files -e "ssh -p 2222" ./dir user@host/path
Rsync runs as a daemon on TCP port 873, which is not secure.
From Rsync man:
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Which misleads people to try this:
rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path
However, that is instructing it to connect to Rsync daemon on port 2222, which is not there.
Upvotes: 14
Reputation: 6548
I was not able to get rsync to connect via ssh on a different port, but I was able to redirect the ssh connection to the computer I wanted via iptables. This is not the solution I was looking for, but it solved my problem.
Upvotes: -4
Reputation: 9549
Your command line should look like this:
rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path
this works fine - I use it all the time without needing any new firewall rules - just note the SSH command itself is enclosed in quotes.
Upvotes: 954
Reputation: 381
I found this solution on Mike Hike Hostetler's site that worked perfectly for me.
# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/
Upvotes: 6
Reputation: 1141
A bit offtopic but might help someone. If you need to pass password and port I suggest using sshpass
package. Command line command would look like this:
sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' [email protected]:/dir_on_host/
Upvotes: 3
Reputation: 45124
when you need to send files through a specific SSH port:
rsync -azP -e "ssh -p PORT_NUMBER" source destination
example
rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination
Upvotes: 44
Reputation: 21549
use the "rsh option" . e.g.:
rsync -avz --rsh='ssh -p3382' root@remote_server_name:/opt/backups
refer to: http://www.linuxquestions.org/questions/linux-software-2/rsync-ssh-on-different-port-448112/
Upvotes: 28
Reputation: 2823
Another option, in the host you run rsync from, set the port in the ssh config file, ie:
cat ~/.ssh/config
Host host
Port 2222
Then rsync over ssh will talk to port 2222:
rsync -rvz --progress --remove-sent-files ./dir user@host:/path
Upvotes: 212