How to Transfer Files with Rsync over SSH
Updated on
•6 min read

When it comes to transferring files between systems on the network, Linux and Unix users have a lot of tools at their disposal.
The most popular protocols for data transfer are SSH and FTP . While FTP is very popular, always prefer using SSH as it is the most secure way to transfer your files.
There are specialized tools for file transfer over SSH such as scp
and sftp
but none of them has all the features that rsync
provides. rsync
can be used for mirroring data, incremental backups, copying files between systems and so on.
In this tutorial, we will explain how to copy files with rsync
over SSH.
Requirements
The
rsync
utility must be installed on both the destination and the source systems. If it is not installed you can install it using your distribution’s package manager:Ubuntu and Debian:
sudo apt install rsync
CentOS and Fedora:
sudo yum install rsync
SSH access to the remote computer.
The user running the
rsync
command and the remote SSH user must have appropriate permissions to read and write files.
Using rsync
to Transfer Files over SSH
With rsync
, you can transfer files and directories over SSH from and to remote servers.
The general syntax for transferring files with rsync
is as follows:
Local to Remote: rsync [OPTION]... -e ssh [SRC]... [USER@]HOST:DEST
Remote to Local: rsync [OPTION]... -e ssh [USER@]HOST:SRC... [DEST]
Where SRC
is the source directory, DEST
is the destination directory USER
is the remote SSH username and HOST
is the remote SSH host or IP Address.
The newer versions of rsync are configured to use SSH as default remote shell so you can omit the -e ssh
option.
For example, to transfer a single file /opt/file.zip
from the local system to the /var/www/
directory on the remote system with IP 12.12.12.12
you would run:
rsync -a /opt/file.zip [email protected]:/var/www/
The -a
option stands for archive mode which will syncs directories recursively, transfer special and block devices, preserve symbolic links, modification times, group, ownership, and permissions.
If you haven’t set a passwordless SSH login to the remote machine, you will be prompted to enter the user password.
If the file exists on the remote server it will be overwritten. If you want to save the file under a different name, specify the new name:
rsync -a /opt/file.zip [email protected]:/var/www/file2.zip
To transfer data from a remote to a local machine, use the remote location as the source and the local location as destination:
rsync -a [email protected]:/var/www/file.zip /opt/
Transferring directories with rsync
over SSH is same as transferring files.
It is important to know that rsync
gives different treatment to the source directories with a trailing slash /
. When the source directory has a trailing slash, rsync
will copy only the contents of the source directory to the destination directory. When the trailing slash is omitted the source directory will be copied inside the destination directory.
For example to transfer the local /opt/website/images/
directory to the /var/www/images/
directory on a remote machine you would type:
rsync -a /home/linuxize/images/ [email protected]:/var/www/images/
Use the --delete
option if you want to synchronize the local and remote directory. Be careful when using this option as it will delete files in the destination directory if they don’t exist in the source directory.
rsync -a --delete /home/linuxize/images/ [email protected]:/var/www/images/
If SSH on the remote host is listening
on a port other than the default 22
, specify the port using the -e
option. For example, if SSH is listening on port 3322
you would use:
rsync -a -e "ssh -p 3322" /home/linuxize/images/ [email protected]:/var/www/images/
When transferring large amounts of data it is recommended to run the rsync
command inside a screen
session or use the -P
option which tells rsync
to show a progress bar during the transfer and keep the partially transferred files:
rsync -a -P /home/linuxize/images/ [email protected]:/var/www/images/
Conclusion
We have shown you how to use rsync
over SSH to copy and synchronize files and directories.
You may also want to read how to exclude files or directories
with rsync
.
Feel free to leave a comment if you have any questions.