How to use rsync to copy files from one Linux system to another Linux system?
Tags: rsync, linux, synchronize, files
Published: 2022-12-02 15:20:06

---
title: How to use rsync to copy files from one Linux system to another Linux system?
published: true
description: Suppose one has a new laptop/system and needs to transfer files from old system to new system how to do it?
tags: rsync, linux, synchronize, files
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0xmsv90x20noivijq7j2.jpg
# Use a ratio of 100:42 for best results.
# published_at: 2022-12-02 15:13 +0000
---
## Introduction
Transferring files between Linux systems can be efficiently handled using `rsync`. This tutorial demonstrates how to use `rsync` for copying files and directories between systems, both from local to remote and from remote to local, with or without using a certificate file.

## Prerequisites
- Both source and destination systems should have `rsync` and `ssh` installed.
- Access credentials (username and password or SSH key) for the destination system.

## Using rsync with a Certificate File

### Copying a File from Local to Remote
To copy a single file from your local machine to a remote server using a certificate file:

```bash
rsync -avz -e "ssh -i ~/servers_ppk_files/pem_file.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ./file_to_be_copied.tar.gz username@remote_server_ip:~/file_to_be_copied.tar.gz
```

### Copying a Directory from Local to Remote
To copy an entire directory from your local machine to a remote server using a certificate file:

```bash
rsync -avz -e "ssh -i ~/servers_ppk_files/pem_file.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ./folder_to_be_copied username@remote_server_ip:~/folder_to_be_copied
```

### Copying a File from Remote to Local
To copy a single file from a remote server to your local machine using a certificate file:

```bash
rsync -avz -e "ssh -i ~/servers_ppk_files/pem_file.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress username@remote_server_ip:~/file_to_be_copied.tar.gz ./file_to_be_copied.tar.gz
```

### Copying a Directory from Remote to Local
To copy an entire directory from a remote server to your local machine using a certificate file:

```bash
rsync -avz -e "ssh -i ~/servers_ppk_files/pem_file.pem -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress username@remote_server_ip:~/folder_to_be_copied ./folder_to_be_copied
```

## Using rsync Without a Certificate File

### Copying a File from Local to Remote
To copy a single file from your local machine to a remote server without using a certificate file:

```bash
rsync -avz --progress ./file_to_be_copied.tar.gz username@remote_server_ip:~/file_to_be_copied.tar.gz
```

### Copying a Directory from Local to Remote
To copy an entire directory from your local machine to a remote server without using a certificate file:

```bash
rsync -avz --progress ./folder_to_be_copied username@remote_server_ip:~/folder_to_be_copied
```

### Copying a File from Remote to Local
To copy a single file from a remote server to your local machine without using a certificate file:

```bash
rsync -avz --progress username@remote_server_ip:~/file_to_be_copied.tar.gz ./file_to_be_copied.tar.gz
```

### Copying a Directory from Remote to Local
To copy an entire directory from a remote server to your local machine without using a certificate file:

```bash
rsync -avz --progress username@remote_server_ip:~/folder_to_be_copied ./folder_to_be_copied
```

## Dealing with Older Servers

Older servers may not support the latest SSH algorithms, which can cause issues when attempting to connect. To resolve this, you can specify the algorithms manually using the following options:

- `-o HostKeyAlgorithms=+ssh-rsa`: This option adds the `ssh-rsa` algorithm to the list of allowed host key algorithms. Host keys are used by SSH to authenticate the server to the client. If the server only supports older algorithms, specifying this option ensures compatibility.
- `-o PubkeyAcceptedKeyTypes=+ssh-rsa`: This option adds the `ssh-rsa` algorithm to the list of accepted public key types for authentication. It ensures that the client can use RSA keys for authenticating to the server.

### Copying a File from Local to Remote
To copy a single file from your local machine to an older remote server:

```bash
rsync -avz -e "ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa" --progress ./file_to_be_copied.tar.gz username@remote_server_ip:~/file_to_be_copied.tar.gz
```

### Copying a Directory from Local to Remote
To copy an entire directory from your local machine to an older remote server:

```bash
rsync -avz -e "ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa" --progress ./folder_to_be_copied username@remote_server_ip:~/folder_to_be_copied
```

### Copying a File from Remote to Local
To copy a single file from an older remote server to your local machine:

```bash
rsync -avz -e "ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa" --progress username@remote_server_ip:~/file_to_be_copied.tar.gz ./file_to_be_copied.tar.gz
```

### Copying a Directory from Remote to Local
To copy an entire directory from an older remote server to your local machine:

```bash
rsync -avz -e "ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa" --progress username@remote_server_ip:~/folder_to_be_copied ./folder_to_be_copied
```

## Options details
- `-a`: Archive mode; equals `-rlptgoD` (no `-H,-A,-X`)
- `-v`: Verbose mode; increases the level of detail in the output
- `-z`: Compress file data during the transfer
- `-e`: Specify the remote shell to use
- `--progress`: Show progress during the transfer
- `ssh -i ~/servers_ppk_files/pem_file.pem`: Use the specified SSH private key for authentication
- `-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null`: Bypass SSH host key checking
- `-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa`: Specify SSH algorithms for older servers to ensure compatibility