SFTP (Safe File Transfer Protocol) is included along with SSH as a secure way to transfer files between remote systems. It also allows users to perform basic administrative tasks on remote servers, such as managing files and directories and setting file permissions.
In this tutorial, we will show you how to use SFTP to transfer files between a local and a remote system using the terminal interface.
- Access to a local system and a remote server, connected using an SSH public key pair.
- A working Internet connection.
- Access to the terminal window.
How to Connect Using SFTP
SFTP establishes a secure connection between systems by using the SSH network protocol. This allows you to connect to any system that has a copy of your public SSH key.
Note: Learn more about SSH key pairs in our guide to using public key authentication with SSH.
Connecting to another system using SFTP follows the same command syntax as connecting using SSH. The command requires you to provide a username and a remote hostname or IP address for the system you want to access:
sftp [username]@[remote hostname or IP address]
In the example below, we are connecting to a system with the IP address 192.168.100.5 using the phoenixnap username:
To end a current connection, use:
How to Transfer Files Using SFTP
Using SFTP allows you to transfer files from a remote server to a local system and vice versa.
Transfer Remote Files to a Local System
get command in the SFTP interface to transfer a file from a remote server to your local system:
get [path to file]
For example, to transfer a file called example_document.txt from the remote system's Home directory to the local system, use:
By default, SFTP transfers files to the local system's Home directory. To transfer files to a different directory, append the path to the directory to the end of the
get example_document.txt Downloads
To change the filename on the local system, append the new file name to the end of the
get example_document.txt sample01.txt
In the example above, the
get command fetches the example_document.txt file and saves it as sample01.txt on the local system.
SFTP also allows the transfer of an entire directory from the remote system by using the
-r flag, indicating a recursive transfer of all files in the directory:
get -r Example_Directory
-P flag to the
get command to transfer the file or directory while preserving permissions and access times:
get -Pr Example_Directory
ls command to verify the transfer to the local system:
Transfer Local Files to a Remote Server
To transfer files from a local system to a remote server, use the
put command. The
put command uses the same syntax and options as the
put [path to file]
For example, to transfer an example01.txt file to the remote server, use:
To transfer the file to a specific directory on the remote server, append the path to the directory to the end of the
put example01.txt Example_Directory
Appending a new filename to the end of the
put command changes the name of the transferred file on the remote server.
put example01.txt text_sample.txt
Transferring an entire directory requires the
put -r Test_Directory
-P flag to the
put command to preserve file permissions:
put -Pr Test_Directory
Verify the file transfer by using the
ls command on the remote system:
Note: Refer to our ultimate guide for SFTP Commands to learn more about the available options and the most common use cases.
File Maintenance Using SFTP
SFTP supports basic file maintenance. For example, use SFTP to modify file and directory permissions on a remote system.
chown command changes the file ownership similar to the chmod command:
chown [user ID] [path to file]
chown accepts user IDs only and not usernames. Finding the UIDs for the remote server using the SFTP interface requires you to transfer and access the /etc/passwd file:
The UID for each user can be found in the third column, as separated by the colons:
chmod command works the same as in the standard shell:
chmod [permission] [path to file]
Another option is to change group file ownership with the
chgrp [group ID] [path to file]
Same as with the UIDs, the group IDs are found in the third column of the /etc/group file on the remote server:
SFTP allows you to set a local umask, which changes the default file permission for the files transferred to the local system.
Note: Learn more about permission masking in our guide to the umask command.
The command above changes the local umask to 022. Every file transferred after you set this umask now has the 644 permission by default. You can still preserve the original permission by using the
Another way to change local file permissions is to use SFTP to replicate the behavior of shell commands. To do this, add an exclamation point (!) before the command name.
For instance, using the
chmod command on the local system:
!chmod [permission] [path to file]
After reading this tutorial, you should be able to use SFTP to transfer files and directories between remote systems. For more information about transferring files, have a look at our guide to installing an FTP server on Ubuntu.