How to copy a folder or file from remote to local using scp

Posted on

Copying a folder or file from a remote server to your local machine using scp (secure copy) is a common task in network management and data transfer. scp is a command-line utility that uses the SSH protocol to securely transfer files and directories between two locations. It provides a straightforward and efficient way to copy data from a remote server to your local system.

Basic Syntax and Usage

Copying a Single File
To copy a single file from a remote server to your local machine, the syntax is:

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

Replace user with your username on the remote host, remote_host with the server’s address, and the paths accordingly.

Example
For instance, to copy a file named example.txt from the remote server to your local directory:

scp [email protected]:/home/john/example.txt /home/localuser/

This command copies example.txt from John’s home directory on the remote server to the local user’s home directory.

Copying Directories

Recursive Copy with -r Option
To copy an entire directory, use the -r (recursive) option:

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

This recursively copies all files and subdirectories.

Example
To copy a directory named project:

scp -r [email protected]:/home/john/project /home/localuser/

This command copies the entire project directory from the remote server to the local user’s home directory.

Specifying Ports

Using a Non-Default SSH Port
If the remote server uses a non-default SSH port, specify it with the -P option:

scp -P 2222 user@remote_host:/path/to/remote/file /path/to/local/destination

Replace 2222 with the actual port number.

Example
For a server running SSH on port 2222:

scp -P 2222 [email protected]:/home/john/example.txt /home/localuser/

This specifies port 2222 for the SSH connection.

Handling Large Transfers

Optimizing for Large Files
For large files, you might want to enable compression with the -C option:

scp -C user@remote_host:/path/to/remote/file /path/to/local/destination

This can significantly reduce the transfer time for large files.

Example
To copy a large file with compression:

scp -C [email protected]:/home/john/largefile.iso /home/localuser/

This compresses largefile.iso during transfer to save bandwidth and time.

Authentication Methods

Password Authentication
If using password authentication, scp will prompt for the remote user’s password:

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

Enter the password when prompted.

Example
A standard scp command with password authentication:

scp [email protected]:/home/john/example.txt /home/localuser/

This will prompt for John’s password on the remote server.

Using SSH Keys
For passwordless authentication, ensure your SSH key is set up between your local and remote machines:

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

No password prompt will appear if keys are configured correctly.

Example
With SSH keys set up:

scp [email protected]:/home/john/example.txt /home/localuser/

This securely copies the file without prompting for a password.

Progress Monitoring

Verbose Mode
Enable verbose mode to get detailed output of the transfer process:

scp -v user@remote_host:/path/to/remote/file /path/to/local/destination

This provides useful debugging information.

Example
To copy with verbose output:

scp -v [email protected]:/home/john/example.txt /home/localuser/

This command displays detailed transfer progress and status messages.

Progress Meter
The -p option shows a progress meter during the transfer:

scp -p user@remote_host:/path/to/remote/file /path/to/local/destination

This helps monitor the progress of the file transfer.

Example
To view a progress meter:

scp -p [email protected]:/home/john/example.txt /home/localuser/

This displays a progress meter for the ongoing transfer.

Advanced Tips

Batch Transfers
For batch transfers, script multiple scp commands or use a loop in a shell script:

for file in file1.txt file2.txt file3.txt; do
    scp user@remote_host:/path/to/remote/$file /path/to/local/destination/
done

This automates the transfer of multiple files.

Example
Batch transferring multiple files:

for file in example1.txt example2.txt example3.txt; do
    scp [email protected]:/home/john/$file /home/localuser/
done

This loop copies three files from the remote server to the local directory.

Using Wildcards
Utilize wildcards for transferring multiple files matching a pattern:

scp user@remote_host:/path/to/remote/*.txt /path/to/local/destination

This command copies all .txt files from the remote directory.

Example
Copying all text files:

scp [email protected]:/home/john/*.txt /home/localuser/

This command copies all .txt files from John’s home directory on the remote server to the local machine.

By following these guidelines and examples, you can efficiently use scp to copy files and directories from a remote server to your local machine, ensuring secure and effective data transfers.

Was this helpful?

Thanks for your feedback!