using scp in terminal
Categories:
Mastering SCP: Secure File Transfers in the Terminal

Learn how to use the scp
command for secure and efficient file transfers between local and remote systems directly from your terminal.
The scp
(secure copy) command is a powerful and widely used utility for securely copying files and directories between hosts on a network. It leverages the SSH (Secure Shell) protocol for data transfer and authentication, ensuring that your data remains encrypted and protected during transit. This article will guide you through the fundamentals of scp
, from basic file transfers to more advanced scenarios, all within the comfort of your terminal.
Understanding SCP Syntax
The basic syntax of the scp
command is similar to the cp
(copy) command, but with the added capability to specify remote hosts. You'll typically provide a source and a destination, where either can be a local path or a remote path specified with a username and hostname.
flowchart LR A[Local Source File] --> B["scp command"] C[Remote Source File (user@host:path)] --> B B --> D[Local Destination Path] B --> E["Remote Destination Path (user@host:path)"] B -- SSH Tunnel --> F[Secure Transfer]
Basic SCP command flow for local and remote transfers.
Basic File Transfers
Let's start with the most common scp
operations: copying files to and from a remote server.
# Copy a local file to a remote server
scp /path/to/local/file.txt user@remote_host:/path/to/remote/directory/
# Copy a file from a remote server to your local machine
scp user@remote_host:/path/to/remote/file.txt /path/to/local/directory/
Examples of copying files to and from a remote server.
Copying Directories Recursively
To copy an entire directory, including all its subdirectories and files, you need to use the -r
(recursive) option with scp
. This is crucial for transferring project folders or large sets of related files.
# Copy a local directory to a remote server recursively
scp -r /path/to/local/directory/ user@remote_host:/path/to/remote/destination/
# Copy a remote directory to your local machine recursively
scp -r user@remote_host:/path/to/remote/directory/ /path/to/local/destination/
Using the -r
option for recursive directory transfers.
Advanced SCP Options
SCP offers several useful options to enhance your file transfer experience, such as specifying a different port, preserving file attributes, or using a specific SSH key.
# Specify a different SSH port (e.g., port 2222)
scp -P 2222 /path/to/local/file.txt user@remote_host:/path/to/remote/directory/
# Preserve file modification times, access times, and modes
scp -p /path/to/local/file.txt user@remote_host:/path/to/remote/directory/
# Use a specific SSH identity file (private key)
scp -i ~/.ssh/my_custom_key /path/to/local/file.txt user@remote_host:/path/to/remote/directory/
# Verbose output for debugging
scp -v /path/to/local/file.txt user@remote_host:/path/to/remote/directory/
Common scp
options for customized transfers.
-P
for port, remember that it's uppercase P
. The lowercase -p
is for preserving file attributes. This is a common point of confusion.1. Verify SSH Connectivity
Before attempting scp
, ensure you can connect to the remote host via SSH: ssh user@remote_host
. If this fails, scp
will also fail.
2. Identify Source and Destination Paths
Clearly define the full path to the file or directory you want to copy, and the full path where you want it to go. Remember to include user@host:
for remote paths.
3. Execute the SCP Command
Run the scp
command with the appropriate options (e.g., -r
for directories, -P
for custom ports). You may be prompted for a password or passphrase for your SSH key.
4. Verify Transfer
After the command completes, log into the remote server (or check your local directory) to confirm that the files or directories have been transferred correctly.