SFTP

FTP, or “File Transfer Protocol” is a protocol of transferring files between two remote systems.

Secure File Transfer Protocol is a variant of the FTP protocol that “tunnels” the session through a Secure Shell (SSH) connection to secure it. Because FTP uses multiple TCP connections (which is an exception in the list of TCP / IP protocols), it is particularly difficult to perform this tunneling.

The name of Secure FTP should not be confused with other methods of securing FTP, such as FTPS (SSL) with certificate of authentication and encryption.

Although SFTP is integrated into many graphical tools, this tutorial will demonstrate how to use it through its interactive command line interface.

Connect with SFTP

Test SSH access with the following command:

ssh username@remote_hostname_or_IP

Type exit if it works.

Connect the the remote system and your prompt will change to an SFTP prompt:

sftp username@remote_hostname_or_IP

Navigating with SFTP

A number of specific command is available to allow you navigating through SFTP.

Get the current directory:

pwd
Remote working directory: /home/demouser

Display the contents of the current directory:

ls
Readme.txt     index.html       temp.txt        rootDirectory

The commands within the SFTP interface implement some optional flags :

ls -la
drwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .
drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history
-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout
-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

Jump to another directory :

cd testDirectory

You can print the local working directory:

lpwd
Local working directory: /Users/demouser

List All the contents of the current directory on the local machine:

lls
Desktop			local.txt		test.html
Documents		analysis.rtf		zebra.html

Transferring Files with SFTP

Downloading files from the remote host

get remoteFile
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Note: the “get” command downloads a remote file to a file with the same name on the local file system.

Specifying different name:

get remoteFile localFile

The “get” command also takes some option flags : -r, -Pr (see details with the help command)

Transferring Local Files to the Remote System

The “put” command:

put localFile
Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

The same flags that work with “get” apply to “put”. So to copy an entire local directory, you can issue:

put -r localDirectory

You can check if you have enough space to complete the transfer before using the following command :

df -h
    Size     Used    Avail   (root)    %Capacity
  19.9GB   1016MB   17.9GB   18.9GB           4%

Return to your SFTP session, type: exit.

Simple File Manipulations with SFTP

Change the owner of a file on the remote system:

chown userID file

Similarly, we can change the group owner of a file with:

chgrp groupID file

Get a listing of the remote system’s groups :

get /etc/group
!less group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

The third column holds the ID of the group associated with name in the first column. This is what we are looking for.

“chmod” command :

chmod 777 publicFile
Changing mode on /home/demouser/publicFile

There is no command for manipulating local file permissions, but you can set the local umask, so that any files copied to the local system will have the appropriate permissions.

That can be done with the “lumask” command:

lumask 022
Local umask: 022

Now all regular files downloaded (as long as the “-p” flag is not used) will have 644 permissions.

SFTP allows you to create directories

“lmkdir” and “mkdir” commands :

For example, the following command would create three directories within the current directory (i.e., the directory in which the user is currently working) with the names dir_1, dir_2 and dir_3:

mkdir dir_1 dir_2 dir_3