We often need to move files from a local machine to a remote server or vice versa, especially when managing or deploying code on servers. One efficient way to do this is through Secure Copy Protocol (SCP), a tool that’s built into the SSH (Secure Shell) protocol. This guide will walk you through how to use SCP on Linux platforms like Ubuntu, Linux Mint, and Debian, among others.

Understanding SSH and SCP: The Basis for Secure File Transfers

SSH, an acronym for Secure Shell, is a protocol used to access remote computers securely. Built into this SSH ecosystem is the Secure Copy Protocol (SCP), an effective tool for transferring files between local and remote computers. Its syntax closely resembles the ‘cp’ (copy) command, but it’s geared towards remote file transfer.

Introducing the SCP Command on Linux

The SCP command in Linux is a utility for transferring files between remote computers. It’s included by default in most Linux and Unix distributions, including Linux Ubuntu, Linux Mint, Linux Debian, Arch Linux, etc., and is part of the OpenSSH packages.

SCP is your secure solution for transferring files between a remote location and a host, or from your local computer to a remote server, or even between two remote locations.

Using Linux SCP via SSH: A Guide on How to Copy Files

The difference between the cp command and the scp command is that the latter requires you to specify the remote host’s DNS name or IP address and provide username credentials. Here’s how to use SCP for copying files from your local machine to a remote server, and from a remote server to your local machine.

Linux SCP from Local to Remote: How to Copy a Single File

Copying a single file from your local computer to a remote computer using SCP involves the following syntax:

# From current folder you don't need to specify the file path

scp myfile.txt username@remoteserver:/remote/folder/

# From any folder from your local computer, write the full local path to the file

scp /full/path/to/myfile.txt username@remoteserver:/remote/folder/

Let’s break down these two examples:

  1. scp myfile.txt username@remoteserver:/remote/folder/

In this first example, we’re using SCP to transfer a file called myfile.txt from the current working directory on our local machine to a folder on the remote server.

  • myfile.txt is the name of the file we want to transfer.
  • username is the username for your account on the remote server.
  • remoteserver is the DNS name or IP address of the remote server.
  • /remote/folder/ is the path of the directory on the remote server where you want to transfer the file.

By running this command, myfile.txt will be securely copied from your local machine to the specified folder on the remote server.

  1. scp /full/path/to/myfile.txt username@remoteserver:/remote/folder/

In the second example, we’re doing the same thing but the file we want to transfer isn’t in our current directory. Instead, it’s located elsewhere on our local machine, and we need to specify its full path.

  • /full/path/to/myfile.txt is the absolute path to the file on your local machine. It provides complete information about the file’s location starting from the root directory.

So, when you run this command, again, myfile.txt will be securely transferred from the specified path on your local machine to the designated folder on the remote server.

Both of these SCP commands offer a simple yet powerful way to perform secure file transfer from a local machine to a remote server using SSH, irrespective of where your file is stored locally.

Linux SCP from Remote to Local: Copying a Single File

You can also copy a file from a remote server to your local computer using SCP. The syntax is similar, only that you invert the order of the local and remote information:

# From remote to current local folder

scp username@remoteserver:/remote/folder/remotefile.txt  localfile.txt

# From remote to local but specifying the local folder target to save the file

scp username@remoteserver:/remote/folder/remotefile.txt  /path/to/local/folder/localfile.txt

Copying Several Files Using SCP

You can copy multiple files from your local machine to a remote server, or vice versa. You can either specify each file as a parameter, or use wildcards:

# Specify each file

scp myfile.txt /local/folder/myfile2.txt username@remoteserver:/remote/folder/

# Use a wildcard to copy several files from remote

scp username@remoteserver:/remote/folder/* .

Recursively Copy Files and Folders from Local to Remote using SCP

To copy recursively files and folders from local to a remote server, you need to use the option -r.

This is particularly useful when setting up a project structure on a remote server:

scp -r * username@remoteserver:/remote/folder/

Copy files using SCP with PEM or CER credential

If you don’t want to type the remote user password when are copying files, you can use a .pem ou .cer file to inform you secure credential to scp ssh connection.

Note that you still need to write the username on the command:

scp -i ~/.ssh/my-certificate.cer my-local-file.html [email protected]:/www/my-project/

Final considerations

The SCP command in Linux is one of the most efficient and secure methods for transferring files between local and remote computers connected over a network. Whether you need to SCP from local to remote or perform SSH file copy operations, this guide has you covered.

Always remember to verify your SCP operations to ensure the correct files have been transferred.

Other Linux commands for file manipulation you should know are:

  • cp: To copy files and directories in the operating system - read the tutorial
  • mv: To move files and directories.
  • rsync: To synchronize files and directories, often used for backups.
  • dd: Used for low-level copying and backup.