How to Copy Files from One Machine to Another Using SSH: Unix & Linux Guide

How to Copy Files from One Machine to Another Using SSH: Unix & Linux Guide

Photo of author
Written By Eric Sandler

Transferring files between machines is a common task in Unix and Linux environments, and one of the most efficient and secure ways to do this is by using SSH (Secure Shell) along with tools like SCP (Secure Copy Protocol) or rsync. SSH provides encrypted communication between systems, ensuring the secure transfer of files.

In this guide, we’ll explain how to copy files from one machine to another using SSH, focusing on SCP and rsync methods.

Prerequisites

Before you start, ensure the following:

  • SSH access: SSH must be enabled on the remote machine, and you should have the appropriate credentials (username and password or SSH key).

  • Basic SSH configuration: SSH needs to be installed on both the local and remote machines, which is typically the default on Unix and Linux systems.

Method 1: Copy Files Using SCP (Secure Copy Protocol)

SCP is the most straightforward way to securely copy files between two machines over SSH. It works similarly to the cp command but for remote file transfers.

Syntax

The basic syntax of scp is:

scp [options] [source] [destination]
  • source: The file or directory you want to copy.
  • destination: The path where you want the file copied, which can be local or remote.

Example 1: Copy a File from Local Machine to Remote Machine

To copy a file from your local machine to a remote machine, use the following command:

scp /path/to/local/file username@remote_host:/path/to/remote/destination

For example, if you want to copy a file named example.txt from your local machine to a directory /home/user/docs on the remote machine:

scp example.txt username@192.168.1.100:/home/user/docs
  • username@192.168.1.100: The username and IP address (or hostname) of the remote machine.
  • You will be prompted for the remote user’s password, or it will use your SSH key if configured.

Example 2: Copy a File from Remote Machine to Local Machine

To copy a file from a remote machine to your local machine:

scp username@remote_host:/path/to/remote/file /path/to/local/destination

For example:

scp username@192.168.1.100:/home/user/docs/example.txt /home/localuser/Documents

This command copies example.txt from the remote machine to your local machine’s /home/localuser/Documents directory.

Example 3: Copy a Directory Recursively

To copy an entire directory from one machine to another, use the -r option to copy recursively:

scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination

For example, to copy a folder named project:

scp -r /home/localuser/project username@192.168.1.100:/home/user/docs

Common SCP Options

  • -r: Recursively copy directories.
  • -P port: Specify the SSH port if it’s not the default (22).
  • -C: Compress the data during transfer to save bandwidth.

Method 2: Copy Files Using Rsync

rsync is another powerful tool for transferring files between machines. It offers more flexibility than SCP, such as the ability to resume interrupted transfers, synchronize files, and optimize bandwidth usage by only transferring changed files.

Syntax

The basic syntax of rsync is:

rsync [options] [source] [destination]

Example 1: Copy Files from Local Machine to Remote Machine

To copy a file from the local machine to a remote machine:

rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination

For example:

rsync -avz /home/localuser/file.txt username@192.168.1.100:/home/user/docs
  • -a: Archive mode, preserves file permissions, timestamps, and symbolic links.
  • -v: Verbose mode, shows detailed information about the transfer.
  • -z: Compresses the data to speed up the transfer.

Example 2: Copy a Directory from Local to Remote Machine

To copy an entire directory from the local machine to the remote machine:

rsync -avz /path/to/local/directory username@remote_host:/path/to/remote/destination

For example:

rsync -avz /home/localuser/project username@192.168.1.100:/home/user/docs

This command copies the project directory to the remote machine while maintaining file permissions and attributes.

Example 3: Copy Files from Remote Machine to Local Machine

To copy a file from the remote machine to your local machine:

rsync -avz username@remote_host:/path/to/remote/file /path/to/local/destination

For example:

rsync -avz username@192.168.1.100:/home/user/docs/file.txt /home/localuser/Documents

Example 4: Synchronize Directories

One of the key features of rsync is the ability to synchronize directories. This means only the changes (new or updated files) will be transferred, saving time and bandwidth. To synchronize directories between a local and a remote machine:

rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/directory/

For example:

rsync -avz /home/localuser/project/ username@192.168.1.100:/home/user/docs/project/

This ensures that both directories contain the same files, transferring only the differences.

Common Rsync Options

  • -a: Archive mode, copies directories recursively and preserves file attributes.
  • -v: Verbose, displays progress and details.
  • -z: Compresses the files for faster transfers.
  • -P: Shows progress and allows resuming of partial transfers.
  • –delete: Deletes files in the destination that are not in the source directory, useful for exact synchronization.

SCP vs Rsync: Which Should You Use?

  • SCP: Simple and straightforward, ideal for quick file transfers when you just need to move files from one machine to another without much complexity.
  • Rsync: More powerful and flexible, ideal for synchronizing directories, resuming interrupted transfers, and reducing bandwidth by only transferring changed files.

If you only need to copy a few files, SCP is a good option. If you need more advanced functionality like synchronization or bandwidth efficiency, rsync is the better choice.

Conclusion

Copying files between machines using SSH is secure and straightforward with tools like SCP and rsync. Whether you’re performing a one-time transfer or need to synchronize directories regularly, both methods offer efficient ways to transfer files over the network.

By choosing the right tool for your needs and following the steps in this guide, you can easily transfer files between Unix and Linux systems with confidence.

Eric Sandler

Latest Early Black Friday Deals

Leave a Comment