Accessing Files Using SFTP on Linux

Secure File Transfer Protocol (sftp) is a file transfer program which runs over an ssh tunnel and uses many features of ssh, including compression and encryption. Essentially, sftp is a drop-in replacement for the standard command-line ftp client, but with ssh authentication.

Starting sftp

The command for starting sftp is as follows:

ComputerName:~# sftp user@sftp.cae.wisc.edu

Where user is your CAE username.

The first time you connect to sftp.cae.wisc.edu, sftp will report that "The authenticity of host 'sftp.cae.wisc.edu' can't be established." This means that sftp doesn't have sftp.cae.wisc.edu in its database of known hosts. Answer yes at the prompt to connect to the server.

Next, sftp will add sftp.cae.wisc.edu to its list of known hosts, and ask for your CAE account password. Enter your password, and sftp will log in and present you with the sftp prompt, which should look like this:

sftp>

By default sftp will change the working directory to your CAE Unix home directory

Using sftp

Many commands sftp uses are similar to the Unix shell commands for navigating files and directories, with a few small changes. The most notable difference is that you are working with two computers so there is usually a "local" and "remote" version of each command (prefixed by an "l" to designate a local command). The following commands work just like their Unix counterparts:

cd - change directory on the ftp server to

lcd - change directory on your machine to

ls - list files in the current directory on the ftp server

lls - list files in the current directory on your machine

pwd - print the current directory on the ftp server

lpwd - print the current directory on your machine.

exit - exit from the sftp program.

Getting Files

The get command in sftp allows you to download files from the sftp server.

Usage: get remote-path [local-path]

Where remote-path is the file on the server you want to download, and the optional local-path is the path you want to put the file on your machine. It defaults to your current directory.

For example, to download a file named "foo.bar", the following command would be used:

sftp>get foo.bar

To download this file and save it as "readme.txt", the following command would be used:

sftp>get foo.bar readme.txt

Getting Multiple Files

To download more than one file from the sftp server use the mget command.

Usage: mget

mget works by expanding each filename listed and running a get command on each file. The files are copied into the local working directory, which can be changed with the lcd command.

For example, to download all the files in the remote working directory, the following command would be used:

sftp> mget ./*

To download all of the files ending with .txt the following command would be used:

sftp> mget ./*.txt

Recursive Copy with SCP

If you try to copy a folder using the get or mget commands, sftp will complain that it "Cannot download non-regular file: filename". This is because the basic sftp client doesn't allow for a recursive copy. However, the program scp will allow you to do this. The scp command will not allow you to see what's on the sftp server, so the files need to be located using the sftp client.

Note: scp is a separate program and must be executed from the Unix command line prompt. NOT within the SFTP client.

Usage: scp copy_from copy_to

For example, if you wanted to copy the file "foobar.txt" from the remote location to your own computer, use the command:

scp user@sftp.cae.wisc.edu:/path/to/foobar.txt /some/local/directory

Likewise, if you wanted to copy the file "foobar.txt" from your own computer to your CAE remote files, use the command:

scp /path/to/foobar.txt user@sftp.cae.wisc.edu:/some/remote/directory

In both examples, user is your CAE username. Enter your password when scp asks for it. scp works just like a get command in sftp.

To recursively copy files or directories from your CAE account, use the -r switch.

For example, to copy the entire directory "tutorial" from my CAE home directory to the home directory on your machine, the following command would be used:

ComputerName:~ # scp -r user@sftp.cae.wisc.edu:~/tutorial ~/

Where user is your CAE username.