How to Use SCP Command to Securely Transfer Files
SCP is a Linux command-line utility that provides functionality for securely copying data between machines. The name of the utility stands for "secure copy" and you can use it to both download and upload files between computers on a local network or to a remote server.
This tool is most commonly used for transferring files securely from your local development environment to a remote web server, so in this tutorial, we will cover how to do this among other things.
Firstly let's have a look at the SCP command syntax, which you can get by typing:
usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
We have our options followed by the location of the source and finally the destination:
scp [options] [user@source] [user@target]
Here are some of the most common scp options:
-rrecursively copy directoy contents
-pport number to connect on
-Ccompress files as they are sent to the target
-pkeep file last modification time
Copy a Single Local File to a Remote Directory
The most basic way to use scp is to copy a single file to a remote location. We can do this using this following command:
scp file.txt [email protected]:/var/www/example.com
After pressing enter you will be prompted to type in your password. Warning: check that you will not be overwriting files at the destination as scp will do this without prompting you.
Firstly we pass the filename in and then the username at the remote server address. The colon indicates the beginning of the target path which will start at the root path.
You will get a permission denied error if you don't have read permissions on your local directory and write permissions on the remote directory.
If the remote machine is only listening on something other than port 22 you can pass in the
-P option to specify it:
scp -P 8000 file.txt [email protected]:/var/www/example.com
Copy Directories and all Files from Remote to Local
To copy directories and the files within them you will need to pass the
-r option into scp command, which tells scp to recursively copy everything.
scp -r directory1 directory2 file1.mp4 [email protected]:/var/www/example.com
Once again just be careful to ensure you are not going to overwrite any files at the destination you don't intend to.
Copy a Remote File to a Local Directory
To copy files from a remote server to you local machine you just have to pass the login and location of the files and then the directory the should be downloaded to.
scp -r [email protected]:/var/www/example.com/directory local/directory
Copy Files between Two Remote Servers
To copy between two remote machines you can pass to sets of logins for each server. The first being the source and the second being the target.
scp -r [email protected]:/source/directory [email protected]:/target/directory
You will be prompted to enter passwords for both servers after hitting enter.
If you would like the data to be transferred VIA your machine you can pass in the -3 flag.
scp -3 -r [email protected]:/source/directory [email protected]:/target/directory