A very good tool for securely copying files via the ssh protocol between machines is scp. It allows you to transfer files to the target machine as well as download from a given source. The tool is usually built into the system so it works on many distributions. Below I will present how you can send and download files. For correct file transfer, running ssh service is required, because it is the basis of scp operation. Of course, when using the tool, you can specify the port as the parameter, provided that it has been changed. The standard port used by the ssh daemon is 22.
In Linux, scp
(Secure Copy) is a command-line utility used for securely transferring files between local and remote systems. It is a secure alternative to cp
, which is not secure when transferring files over a network.
The scp
command is commonly used for copying files to or from a remote server. It uses the SSH protocol to securely transfer files and provides the same level of security as SSH. The syntax of the scp
command is as follows:
1 |
scp [options] [source] [destination] |
Here, [source]
is the file or directory you want to copy, and [destination]
is the location where you want to copy the file or directory.
Some common options used with the scp
command are:
-r
: Copies directories recursively-P
: Specifies the port number to use for the SSH connection-i
: Specifies the path to the identity file used for authentication
For example, to copy a file named file.txt
from a remote server to the local machine, you would use the following command:
1 |
scp user@remote:/path/to/file.txt /path/to/local/directory/ |
This command will copy the file from the remote server to the local machine at the specified directory.
Similarly, to copy a directory named dir
from the local machine to a remote server, you would use the following command:
1 |
scp -r /path/to/local/dir user@remote:/path/to/remote/directory/ |
This command will copy the directory and its contents from the local machine to the remote server at the specified directory.
Let’s start by creating an example file that we will transfer:
1 |
$ echo “example text” > example_file |
in the next step, let’s move on to uploading the file. In my case, the port from ssh has been changed to 2222:
1 |
$ scp -P2222 example_file soban@soban.pl:~ |
The first time you connect, you will be asked for a fingerprint.
As you can see, the file has been sent correctly.
Instead of the sign at the end of ‘~‘ we can specify where the target file should be placed (/tmp/example-path):
1 |
$ scp -P2222 example_file soban@soban.pl:/tmp/example-path |
There are many combinations, you can send, for example, all files containing the ending (*.tar.gz) to the user’s home directory, which is just symbolized by ‘~‘:
1 |
$ scp -P2222 *.tar.gz soban@soban.pl:~ |
An interesting parameter is the ‘-r‘ in scp where we can transfer entire folders, example using copying a folder from local machine to remote machine:
1 |
$ scp -P2222 -r /local/directory/ soban@soban.pl:/remote/directory/ |
OK, after the file has been successfully sent to the target machine, let’s delete the local file we created above and try to download it back:
1 |
$ rm example_file |
Next, let’s move on to downloading the file from the remote server to the local machine:
1 |
$ scp -P2222 soban@soban.pl:example_file ~ |
Above I gave an example of how to send an entire folder from a local machine to a remote machine. The other way around, of course, we can also do it. To download a remote folder to a local machine, use the ‘-r‘ parameter:
1 |
$ scp -P2222 -r soban@soban.pl:/remote/directory/ /local/directory/ |
The scp utility has more parameters, you can get them by reading the man page:
1 |
$ man scp |
It is worth paying attention to the ‘-l‘ parameter where we can set the limit of transferred files. This is useful when transferring larger files so as not to overload your connection.
If you are tired of constantly entering your password, I encourage you to read how you can connect to ssh without providing a password. Then copying files using scp will become more: generate ssh key pair in linux.
In my opinion, scp is good for transferring files quickly one time. However, as often you exchange files between machines a more convenient way is to use sshfs as described here: sshfs great tool to mount remote file system.