SCP (Secure Copy) is a command-line tool that enables you to transfer files and directories between two locations in a secure manner.
With SCP, you can copy a file or directory:
- From your local system to a remote system.
- From a remote system to your local system.
- Between two remote systems from your local system.
When using SCP to transfer data, both the files and password are encrypted, which prevents any snooping on the traffic from obtaining any sensitive information.
This tutorial demonstrates how to use the scp
command with practical examples and in-depth explanations of the most common SCP options.
SCP syntax
Before learning how to use the scp
command, let’s review the basic syntax.
The syntax of the scp
command is as follows:
scp [OPTION] [user@SOURCE_HOST:]file1 [user@DESTINATION_HOST:]file2
OPTION
– SCP options such as cipher, SSH configuration, SSH port, limit, recursive copy, and so on.[user@SOURCE_HOST:]file1
– The source file.[user@DESTINATION_HOST:]file2
– The destination file.
Local files should be specified using an absolute or relative path, while remote file names should include a user and host specification.
SCP offers numerous options that control every aspect of its behavior. The most commonly used options are:
-P
– Specifies the SSH port of the remote host.-p
– Preserves the modification and access times of files.-q
– Use this option to suppress the progress meter and non-error messages.-C
– This option forcesscp
to compress data as it’s sent to the destination machine.-r
– This option instructsscp
to copy directories recursively.
The scp
command relies on SSH for data transfer, so it requires either an SSH key or password to authenticate with remote systems.
The colon (:) is the character that scp
uses to differentiate between local and remote locations.
To copy files, you need at least read permission on the source file and write permission on the target system.
Be cautious when copying files that have the same name and location on both systems because scp
will overwrite files without giving a warning.
Copy files from a local system to a remote system using SCP
To copy a file from a local system to a remote one, use the following command:
scp file.txt remote_username@192.168.2.1:/remote/directory
In this example, file.txt
is the name of the file you want to copy, remote_username
is the username on the remote server, and 192.168.2.1
is the IP address of the server. /remote/directory
is the path to the directory where you want to copy the file. If you don’t specify a remote directory, the file will be copied to the remote user’s home directory.
You will be prompted to enter the user’s password, and the transfer process will commence.
If you exclude the filename from the destination location, the file will be copied with its original name. To save the file under a different name, you must specify the new filename:
scp file.txt remote_username@192.168.2 1:/remote/directory/newfilename.txt
If the SSH service on the remote host is listening on a port other than the default port 22 (2322 for example), you can specify the port using the -P
option:
scp -P 2322 file.txt remote_username@192.168.2.1:/remote/directory
Copying a directory is similar to copying files, but with the added step of using the -r
flag for recursive copying.
To copy a directory from a local system to a remote one, use the -r
option:
scp -r /local/directory remote_username@192.168.2.1:/remote/directory
Copy files from a remote system to a local system using SCP
To copy a file from a remote system to a local one, use the remote location as the source and the local location as the destination.
For instance, to copy a file named file.txt
from a remote server with IP address 192.168.2.1
, use the following command:
scp remote_username@192.168.2.1:/remote/file.txt /local/directory
Securely transfer files between two remote systems using SCP
Unlike rsync
, which requires logging into one of the servers to transfer files between remote machines, you can use scp
to do so directly.
Use the following command to copy the file /files/file.txt
from the remote host host1.com
to the directory /files
on the remote host host2.com
:
scp user1@host1.com:/files/file.txt user2@host2.com:/files
You will need to enter the passwords for both remote accounts when prompted. The data will be transferred directly between the remote hosts.
If you want to route the traffic through the machine where the command is executed, use the -3
option:
scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files