SFTP with curl - A Cheat Sheet

Did you know you can use curl as a SFTP client? In this post we will guide you through all the curl commands you can use to upload download of list files on a SFTP server via examples of commands you can execute in your terminal.

List files via curl

~/$ curl -k sftp://127.0.0.1
drwxr-xr-x 2 mickael mickael 4096 Jun 25 2021 Videos
drwx------ 2 mickael mickael 4096 Mar 5 00:00 .ssh
drwxr-xr-x 3 mickael mickael 4096 Jul 3 2021 Music
drwxrwxr-x 6 mickael mickael 4096 Jan 26 00:00 filestash
-rw------- 1 mickael mickael 55 Jun 26 2021 .authinfo
drwxr-xr-x 3 root root 4096 Jun 25 2021 ..
-rw------- 1 mickael mickael 100306 Apr 1 00:54 .bash_history
drwxr-xr-x 2 mickael mickael 20480 Mar 3 08:40 Pictures
drwxr-xr-x 3 mickael mickael 16384 Apr 1 09:17 Downloads
drwxr-x--- 46 mickael mickael 4096 Apr 1 00:54 .
-rw-r--r-- 1 mickael mickael 4153 Jul 25 2021 .bashrc
drwxr-xr-x 11 mickael mickael 4096 Feb 6 18:59 Documents
drwx------ 7 mickael mickael 4096 Mar 30 16:19 .emacs.d
-rw-rw-r-- 1 mickael mickael 3433 Jun 25 2021 .tmux.conf
drwxr-xr-x 2 mickael mickael 4096 Nov 30 19:42 Desktop
~/$ curl -k sftp://127.0.0.1/~/Downloads
-rw-rw-r-- 1 mickael mickael 12 Apr 1 15:28 foobar.txt

Authenticate user

You have a few ways to authenticate a user.

A first technic is to use private key authentication with your private key in ~/.ssh/id_rsa:

~/$ curl -k sftp://root@127.0.0.1
...

The other method is by prividing your machine password, this is how it works:

~/$ curl -k --user root sftp://127.0.0.1
Enter host password for user 'root':
...

Upload a file via curl

~/$ echo "lorem ipsum" > foobar.txt
~/$ curl -T foobar.txt -k sftp://127.0.0.1/~/Downloads/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     6    0     0  100     6      0      9 --:--:-- --:--:-- --:--:--     9
100     6    0     0  100     6      0      9 --:--:-- --:--:-- --:--:--     9

Download a file via curl

~/$ curl -k sftp://127.0.0.1/~/Downloads/foobar.txt
lorem ipsum

or download the file directly in your local machine:

~/$ curl -O -k sftp://127.0.0.1/~/Downloads/foobar.txt
~/$ cat foobar.txt
lorem ipsum