# Guillermo Garron

## scp command Tutorial

Contents

### Introduction

scp stands for secure cp (copy), which means you can copy files across ssh connection. That connection will be securely encrypted, it is a very secure way to copy files between computers.

scp uses by default the port 22, and connect via an encrypted connection or secure shell connection. (ssh for short)

You can use scp to copy files from or to a remote server. You can also copy files from one remote server to another remote server, without passing traffic through your PC.

You can use scp on Linux, Mac and Windows (using WinSCP). You may also want to check sftp

### Syntax

scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2


Explaining the complete syntax and every option of this command is out of the scopy of this page, you can always enter a the command prompt

man scp


Or you can read it online here

We are going to explain the basic part of it:

scp [[user@]host1:]file1 ... [[user@]host2:]file2

scp
Is the command itself and tells the operating system to copy one or more files over a secure shell connection, better known as ssh connection.
[[user@]host1:]file1
The origin, where you specify the file or files to be copied, it can contain or not the information about a remote host, and it can also contain the information about the user owning the file or files in that remote host. If the user is not specified it will defaults to the current user in the machine where you are typing the command. If the host is not specified, it will look for the file locally using any given path.
[[user@]host2:]file2
The destination, where you specify the path where the files are going to be copied, once again, it can contain or not the information about the remote host and/or user in that host. Same as above if the user is not specified but a hostname is given it will defaults to the current username and will try to log in the remote server using that user. And in the same way as with origin, if the host is not specified, the files will be copied locally.

Just to clarify, you can avoid specifying both username and host in origin and destination, and the scp command will work just like the cp command, copying a local file to a local destination.

### Examples

Copy one single local file to a remote destination

scp /path/to/source-file user@host:/path/to/destination-folder/


So, if you wan to copy the file /home/user/table.csv to a remote host named host.example.com and copy there to jane’s home folder, use this command.

scp /home/user/table.csv jane@host.example.com:/home/jane/


Copy one single file from a remote server to your current local server

scp user@host:/path/to/source-file /path/to/destination-folder


Let’s say now you want to copy the same file from jane’s home folder in host.example.com to your local home folder.

scp jane@host.example.com:/home/jane/table.csv /home/user/


Copy one single file from a remote server to another remote server

With scp you can copy files between remote servers from a third server without the need to ssh into any of them, all weight lifting will be done by scp itself.

scp user1@server1:/path/to/file user2@server2:/path/to/folder/


Let’s say now you want to copy the same table file from jane’s home folder to pete’s home folder in another remote machine.

scp jane@host.example.com:/home/jane/table.csv pete@host2.example.com:/home/pete/


Copy one single file from a remote host to the same remote host in another location

scp jane@host.example.com:/home/jane/table.csv pete@host.example.com:/home/pete/


This time, you will be copying from one host to the same host, but on different folders under the control of different users.

Copy all files of a specific type

scp /path/to/folder/*.ext user@server:/path/to/folder/


This will copy all files of a given extension to the remote server. For instance, you want to copy all your text files (txt extension) to a new folder.

scp /home/user/*.txt jane@host.example.com:/home/jane/


You can make use of wildcards in any way you want.

Copy all files in a folder to a remote server

scp /path/to/folder/* user@server:/path/to/folder/


This will copy all files inside local folder to the remote folder, let’s see an example.

scp /home/user/html/* jane@host.example.com:/home/jane/backup/


All files in local folder html, will be copied to backup folder in host.example.com

Copy all files in a folder recursively to a remote server

scp -r /home/user/html/* jane@host.example.com:/home/jane/backup/


Same as the previous example, but this time it will copy all contentes recursively

Copy a folder and all its contents to a remote server

scp -r /path/to/source-folder user@server:/path/to/destination-folder/


This time the folder itself is copied with all its contents and not only the contents. One more time we’ll use an example.

scp -r /home/user/html jane@host.example.com:/home/jane/backup/


This will result in having in the remote server this: /home/jane/backup/html/.... The whole html folder and its contentes recursively have been copied to the remote server.

### Tips

We have seen the basic uses scp, now we will see some special uses and tricks of this great command

Increase Speed

scp uses AES-128 to encrypt data, this is very secure, but also a litle bit slow. If you need more speed and still have security, you can use Blowfish or RC4.

To increase scp speed change chipher from the default AES-128 to Blowfish

scp -c blowfish user@server:/home/user/file .


Or use RC4 which seems to be the fastest

scp -c arcfour user@server:/home/user/file .


This last one is not very secure, and it may not be used if security is really an issue for you.

Increase Security

If security is what you want, you can increase it, you will lose some speed though.

scp -c 3des user@server:/home/user/file .


Limit Bandwidth

You may limit the bandwidth used by scp command

scp -l limit username@server:/home/uername/* .


Where limit is specified in Kbit/s. So for example, if you want to limit speed at 50 Kbps

scp -l50 user@server:/path/to/file /path/to/folder


Save Bandwidth

Yoy can save bandwidth by enabling compression, let’s see our example with compression.

scp -C user@server:/path/to/file /path/to/folder


Use IPv4 or IPv6

If you want to force the use of either IPv4 or IPv6 use any of these ones.

scp -4 user@server:/path/to/file /path/to/folder


The above one is for IPv4, and below for IPv6.

scp -6 user@server:/path/to/file /path/to/folder


Specify a port

If the remote server does not have ssh listening on default 22 port, you can make scp to use the port where the remote server is listening to:

scp -P [port] [user]@[server]:[path/to/]file [/path/to/]file


Using the capital letter P you can make scp to use a port other than 22 which is the default for ssh. Let’s say your remote server is listening on 2222.

scp -P 2222 user@server:/home/jane/file /home/jane/


### Windows

If you are working on a Windows powered computer, you can still enjoy scp in various ways, of course if you are a “*nix guy” you will prefer the command line, and you also have GUI tools available.

#### pscp

pscp is a shell command that works almost on Windows Shell almost the same way that scp works on Linux or Mac OS X, you first need to download it from this page, here is the direct link.

Once downloaded you can invoque it from the Windows command line, go to the start menu and click on run then write

cmd


And press ENTER, if you are on Windows 8.x hit the Windows/Super key and click on the magnifier lens, type cmd and hit ENTER.

SET PATH=C:\Users\Guillermo\Downloads;%PATH%


You will have to set that command every time you open a new command shell, or you can add the path permanently, how to do that is out of the scope of this article.

Below are the options of the command, you will see that the options available let you do almost everything.

PuTTY Secure Copy client
Release 0.63
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V        print version information and exit
-pgpfp    print PGP key fingerprints and exit
-p        preserve file attributes
-q        quiet, don't show statistics
-r        copy directories recursively
-v        show verbose messages
-P port   connect to specified port
-l user   connect with specified username
-1 -2     force use of particular SSH protocol version
-4 -6     force use of IPv4 or IPv6
-C        enable compression
-i key    private key file for authentication
-noagent  disable use of Pageant
-agent    enable use of Pageant
-batch    disable all interactive prompts
-unsafe   allow server-side wildcards (DANGEROUS)
-sftp     force use of SFTP protocol
-scp      force use of SCP protocol


Copy files from Windows to Linux

You can use scp command to copy files from Linux to Windows

pscp c:\path\to\file user@remote-server:/path/to/remote-folder


Copy files from Linux to Windows

You can also copy files from Windows to Linux, using pscp from the Windows computer you can “push” the files to the Linux, Max OS X or *BSD server.

pscp user@remote-server:/path/to/remote-file c:\path\to\local-folder\


Specify protocol

You can specify the protocol that scp command for Windows will use at the time of connection.

-scp
This will force pscp to use scp protocol
-sftp
This will force pscp to use sftp protocol, which is a newer protocol than scp protocol

#### WinSCP

WinSCP is a GUI version of scp, mainly for Windows, its development was started on 2.000 by Martin Přikryl and it is licenced under GNU licence.

It is not only a SCP client, but also SFTP and FTP client too.

Screenshot

Below you can see a Screenshot of WinSCP

Main Features

Some of its main features are:

Full Sync
This feature will keep both remote and local folders in sync, so any change you perform in any of the ends of the connection will be updated on the other end. The application should be kept on, and connected to keep this functionality running
Sync Remote

This feature will keep only the remote end in sync with the local, so any change made on the local side, will be updated in the remote side. But this will not work in other way. That is any change in remote will not be updated in local.

You can decide to delete remote files or not at the time of starting the syncronization. If you turn it on, any files deleted on local, will be deleted on remote, but if not, only new added files or changes to existing ones will be updated

Drag and Drop

You can also use the drag and drop feature to copy files from remote to local or viceversa

As you can see, you can optain the same basic functionality for Windows that Linux users already enjoy, and this is maybe the best and easieste way to transfer files from Windows and Linux and viceversa.

Last edit on: January 17, 2015

By: Guillermo Garron