Ketema
Ketema

Reputation: 6548

Is it possible to specify a different ssh port when using rsync?

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

Answers (11)

SickProdigy
SickProdigy

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

Chris
Chris

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

Luke
Luke

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

Kevin
Kevin

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

Ketema
Ketema

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

klapa
klapa

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

Rusty1
Rusty1

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

Tomas
Tomas

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

Techie
Techie

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

Siwei
Siwei

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

Joao Costa
Joao Costa

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

Related Questions