sftp stands for (Secure File Transfer Protocol) and it is another implementation of file transfer protocol over ssh (Secure Shell) like scp but newer and trying a more platform independent.
sftp is now a days mostly implemented as a replacement for FTP, mainly in web hosting providers, because of its security and because passwords are not passed unencrypted as they are in FTP.
There are three different ways to invoke
sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config] [-o ssh_option] [-P sftp_server_path] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
The first one is very similar to the ftp command, when you use this form, you enter in an interactive mode, you can create folders, navigate in the structure and retrieve and put files from and to the server.
The second way, works almost the same as
scp it will ask for the password (unless you are using secret/public key to authenticate) and once you are authenticated the files will be downloaded or uploaded depending on the case.
The third form works almost the same as the first one but it let's you start in a specific remote folder.
The fourth form let's you specify a batch file where the commands to be run should be, in that case you need to enable a way to log in with no password, you can use this guide
Download a file with sftp
If you want to retrieve a file from a sftp server, you can do so by using the interactive mode in the next way. First log into the server.
Once logged in, you can list files with
ls command, or navigate in the folders with
cd command, just like as if you were using the shell. To retrieve a file, use this command.
Download multiple files with sftp
Will download all .txt files from current remote folder to current local folder
Will download all files from current remote folder to current local folder
Upload a file with sftp
If you want to put a file into the server, you can use something similar.
Download multiple files at once
Will upload all .txt files
Will upload all files in current local folder to current remote folder.
Navigate in local and remote sides
In the above examples we assume you are located where you want to be, in case you may need to change your local or remote location, that can be done.
List files in remote side
List files in local side
Change folder in remote side
Change folder in local side
Create folders in remote side
Create folders in local side
You can get the complete set of commands available under interactive mode with the
help command, once logged in run:
You will get this set of commands:
Available commands: bye Quit sftp cd path Change remote directory to 'path' chgrp grp path Change group of file 'path' to 'grp' chmod mode path Change permissions of file 'path' to 'mode' chown own path Change owner of file 'path' to 'own' df [-hi] [path] Display statistics for current directory or filesystem containing 'path' exit Quit sftp get [-Ppr] remote [local] Download file help Display this help text lcd path Change local directory to 'path' lls [ls-options [path]] Display local directory listing lmkdir path Create local directory ln [-s] oldpath newpath Link remote file (-s for symlink) lpwd Print local working directory ls [-1afhlnrSt] [path] Display remote directory listing lumask umask Set local umask to 'umask' mkdir path Create remote directory progress Toggle display of progress meter put [-Ppr] local [remote] Upload file pwd Display remote working directory quit Quit sftp rename oldpath newpath Rename remote file rm path Delete remote file rmdir path Remove remote directory symlink oldpath newpath Symlink remote file version Show SFTP version !command Execute 'command' in local shell ! Escape to local shell ? Synonym for help
You can download files from a single command when using not interactive mode:
Retrieve a single file
Retrieve multiple files
That will get all files in the remote folder, if you want a specific type of files, narrow the option using wildcards.
Will get all files with .txt extension.
Download multiple files recursively
sftp -r user@host:/path/to/files/*
That command will copy all files from the remote folder and its sub-folders with all its contents.
When you are working on a Windows machine your best bet to use sftp protocol is WinSCP which is a scp, sftp and ftp client for Windows.
WinSCP is a complete SFTP client, and it has lots of features like:
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
You can also use the drag and drop feature to copy files from remote to local or viceversa
Another open source GUI tool for Windows is Cyberduck, released under the GNU licence, you can perform the same things with Cyberduck that you can with WinSCP, the main difference is that Cyberduck does not have the two panes window, and I must say I prefer the WinSCP two panes window for better browsing on both remote and local sides of the sftp connection.
With Cyberduck you need to open the Windows Explorer to copy files and paste them later on Cyberduck window, or you can drag and drop from one window to the other. Here is how it looks when loggin in:
And the main window looks this way.
You can emulate the view of WinSCP by putting both Windows Explorer and Cyberduck windows side by side in the screen, like this:
Bein Mac OS X an Operating System based on Unix, you have both sftp client and sftp server (which is OpenSSH) already installed out of the box from the command line.
There are of course a lot of GUI clientes available for Mac
Open Source Client
The one I use is CyberDuck, It supports Amazon S3 connection besides SFTP, you can drag and drop to and from the Finder app, you can keep folders in sync between your Mac and the remote OpenSSH server, you can create and delete files and folders.
You can do anything available from the command line, but using a graphic interface, which makes it a lot easier to work with sftp servers.
Last edit on: January 17, 2015
By: Guillermo Garron