Best practices state that you should run ssh on an non-standard port. Unfortunately some programs use port 22 by default and it isn’t obvious what the switch is to change this port.
One of these programs is the eminently useful rsync. It states how to do this in the man file, but it is hidden and non-obvious. You simply add the option via the -e command to pass ssh options. -e is the shell rsync uses to connect to a remote host.
Using rsync on an alternate ssh port
rsync -avz -e "ssh -p $port" username@ip:/path/to/files/ /local/files/
Using rsync with an openssh key
rsync -avz -e "ssh -i /path/to/private/key" username@ip:/path/to/files/ /local/files/
Or with both an alternate port and openssh key:
rsync -avz -e "ssh -i /path/to/private/key -p $port" username@ip:/path/to/files/ /local/files/
This can be used in a bash script if you set the $port variable or directly on the command line by using the set port instead of $port.
Here are some other useful pages regarding using rsync. If you don’t use rsync for remote file transfer – I highly recommend it. The transfer speed is much faster than scp over ssh.
Originally posted 20121009 and last touched 20121009