SFTP ou Secure File Transfer Protocol est un utilitaire de transfert de fichiers à distance sécurisé basé sur le protocole de transfert de fichiers (FTP).

Le trafic FTP n’est pas crypté et n’est pas sécurisé, c’est pourquoi il a été remplacé par le SFTP.

SFTP fonctionne par défaut via le protocole SSH sur le port TCP 22 et offre les mêmes capacités de sécurité et de cryptage que SSH. Le démon SSH par défaut, qui s’exécute dans le cadre du serveur OpenSSH sur les systèmes Linux, prend en charge les fonctionnalités de base du protocole SFTP par défaut, bien qu’il existe des logiciels dédiés distincts, tels que vsftpd, qui peuvent être configurés pour obtenir des fonctionnalités supplémentaires et des personnalisations.

Dans cet article, nous allons couvrir l’utilisation de SFTP à partir de la ligne de commande. J’utiliserai un système Ubuntu, mais les commandes listées ici fonctionneront sur n’importe quel système Linux doté d’un client SFTP.

Avant d’entrer dans les commandes, vous devez savoir que SCP devient obsolète et qu’il est bon de se familiariser avec la commande SFTP. Vous pouvez faire avec SFTP à peu près tout ce que vous pouvez faire avec SCP.

Copier des fichiers

SFTP peut remplacer la commande SCP (Secure Copy) dans certains cas d’utilisation. L’un de ces cas est l’utilisation de SCP pour pousser ou tirer des fichiers d’un serveur distant en une seule fois.

La syntaxe de téléchargement à l’aide de la commande SCP est la suivante :

$ scp {chemin local} {utilisateur}@{hôte distant}:{chemin distant}

Et pour le téléchargement, voici la syntaxe : $ scp {utilisateur}@{hôte distant}:{chemin distant} :

$ scp {utilisateur}@{hôte distant}:{chemin-fichier-distant} {chemin-local}

De même, nous pouvons utiliser la syntaxe de la commande sftp suivante pour télécharger des fichiers vers un serveur distant :

$ sftp {utilisateur}@{hôte}:{chemin-distant} <<< $'put {chemin-local}'

Vous trouverez ci-dessous une démo montrant le téléchargement de fichiers à l’aide de sftp:

$ sftp ftpuser@192.168.1.231:/home/ftpuser/remote_test_dir << $'put /home/abhisheknair/new_file'
ftpuser@192.168.1.231's password:
Connecté à 192.168.1.231.
Changing to : /home/ftpuser/remote_test_dir
sftp> put /home/abhisheknair/new_file
Téléchargement de /home/abhisheknair/new_file vers /home/ftpuser/remote_test_dir/new_file
/home/abhisheknair/new_file 100% 9 7.2KB/s 00:00
$

Pour télécharger un fichier à partir d’un serveur distant, utilisez la syntaxe de commande suivante :

$ sftp {utilisateur}@{hôte distant}:{nom-de-fichier-distant} {nom-de-fichier-local}

Voici une démonstration du téléchargement d’un fichier en une ligne à l’aide de sftp :

$ sftp ftpuser@192.168.1.231:/home/ftpuser/new_file1 /home/abhisheknair/new_local_dir
ftpuser@192.168.1.231's password:
Connecté à 192.168.1.231.
Récupération de /home/ftpuser/new_file1 vers /home/abhisheknair/new_local_dir/new_file1
/home/ftpuser/new_file1 100% 12 3.6KB/s 00:00
$

Vous pouvez également échanger la clé SSH pour une authentification sans mot de passe.

Connexion à un serveur SFTP

Pour initier une connexion SFTP, utilisez la commande sftp avec un nom d’utilisateur et le nom ou l’adresse IP de l’hôte distant. Le port TCP 22 par défaut doit être ouvert pour que cela fonctionne ou spécifiez explicitement le port à l’aide de l’option -oPort.

Je me connecte à un serveur SFTP dont l’adresse IP est 192.168.1.231. La première fois que vous vous connectez à un serveur SFTP, il vous sera demandé de confirmer l’empreinte du serveur comme pour SSH. Une fois que vous avez confirmé en tapant‘yes‘, la connexion se poursuit et demande le mot de passe de l’utilisateur.

Si la connexion est réussie, l’invite sftp> s ‘affiche.

$ sftp ftpuser@192.168.1.231
L'authenticité de l'hôte '192.168.1.231 (192.168.1.231)' ne peut être établie.
L'empreinte de la clé ECDSA est SHA256:k90E28Pfnjoiq1svFw18dA2mazweoCmR5Hqi8SH0mj0.
Êtes-vous sûr de vouloir continuer à vous connecter (oui/non/[empreinte]) ? oui
Attention : Ajout permanent de '192.168.1.231' (ECDSA) à la liste des hôtes connus.
ftpuser@192.168.1.231's password:
Connexion à 192.168.1.231.
sftp>

Vérifiez la version

Vous pouvez vérifier la version de SFTP en utilisant la commande version à l’invite de sftp.

sftp> version
Version 3 du protocole SFTP
sftp>

Obtenir de l’aide

Pour obtenir de l’aide sur les commandes disponibles et la syntaxe de SFTP, utilisez ‘?‘ ou‘help‘.

sftp> ?
Commandes disponibles :
bye Quitter sftp
cd chemin Changer le répertoire distant en "chemin"
chgrp [-h] grp path Change le groupe du fichier 'path' en 'grp'
chmod [-h] mode chemin Changer les permissions du fichier 'chemin' en 'mode'
chown [-h] own chemin Changer le propriétaire du fichier 'chemin' en 'own'
df [-hi] <x><x>[chemin]</x></x> Affiche les statistiques du répertoire ou du système de
répertoire ou du système de fichiers contenant 'path'
exit Quitter sftp
get [-afpR] remote <x>[local]</x> Télécharger un fichier
help Affiche ce texte d'aide
lcd path Modifier le répertoire local en 'path'
lls [ls-options <x><x>[path]]</x></x> Affiche la liste du répertoire local
lmkdir path Créer un répertoire local
ln [-s] oldpath newpath Lier un fichier distant (-s pour un lien symbolique)
lpwd Imprimer le répertoire de travail local
ls [-1afhlnrSt] <x><x>[path]</x></x> Afficher la liste des répertoires distants
lumask umask Définir l'umask local à 'umask'
mkdir path Créer un répertoire distant
progress Basculer l'affichage de l'indicateur de progression
put [-afpR] local <x>[remote]</x> Télécharger un fichier
pwd Afficher le répertoire de travail distant
quit Quitter sftp
reget [-fpR] remote <x>[local]</x> Reprendre le téléchargement du fichier
rename oldpath newpath Renommer le fichier distant
reput [-fpR] local <x>[remote]</x> Reprendre le téléchargement du fichier
rm path Supprimer le fichier distant
rmdir path Supprimer le répertoire distant
symlink oldpath newpath Symlink fichier distant
version Affiche la version SFTP
!command Exécuter 'command' dans l'interpréteur de commandes local
! Echapper à l'interpréteur de commandes local
? Synonyme de help
sftp>

Afficher le répertoire de travail

Lorsque vous êtes connecté à un serveur distant, vous pouvez afficher le répertoire de travail actuel du système distant à l’aide de la commande pwd.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp>

Pour afficher le répertoire de travail actuel du système local, utilisez la commande lpwd.

sftp> lpwd
Répertoire de travail local : /home/abhisheknair
sftp>

Lister les fichiers

Vous pouvez dresser la liste des fichiers présents dans le répertoire de travail distant à l’aide de la commande ls.

sftp> ls
fichier_distant1 fichier_distant2 fichier_distant3 répertoire_test_distant
sftp>

Pour répertorier les fichiers du répertoire de travail local, utilisez la commande lls.

sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp>

Changement de répertoire

Vous pouvez changer de répertoire de travail à distance à l’aide de la commande cd. Reportez-vous à l’exemple ci-dessous :

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> cd remote_test_dir
sftp> pwd
Répertoire de travail distant : /home/ftpuser/remote_test_dir
sftp>

Pour changer de répertoire de travail local, utilisez la commande lcd. Vous trouverez ci-dessous un exemple simple de l’utilisation de la commande lcd.

sftp> lpwd
Répertoire de travail local : /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lcd testdir
sftp> lpwd
Répertoire de travail local : /home/abhisheknair/testdir
sftp>

Chargement des fichiers

Pour télécharger un seul fichier, utilisez la commande put. Voyez comment je télécharge le fichier local 1 dans le répertoire de travail distant à l’aide de la commande put. Je peux le vérifier en utilisant la commande ls qui affiche le contenu du répertoire de travail distant.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> lpwd
Répertoire de travail local : /home/abhisheknair
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> put file1
Téléchargement du fichier1 dans /home/ftpuser/file1
fichier1 100% 6 6.0KB/s 00:00
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Pour télécharger plusieurs fichiers en une seule fois, vous pouvez utiliser la commande mput comme indiqué ci-dessous. J’utilise mput avec une expression régulière file[23] qui télécharge les fichiers 2 et 3 et ignore le fichier 1 car il a déjà été téléchargé à l’étape précédente. Vous pouvez utiliser n’importe quel joker ou expression régulière avec mput.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> lpwd
Répertoire de travail local : /home/abhisheknair
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> mput fichier<x>[23]</x>
Téléchargement du fichier2 dans /home/ftpuser/file2
fichier2 100% 6 6.5KB/s 00:00
Téléchargement du fichier 3 vers /home/ftpuser/file3
fichier3 100% 6 5.3KB/s 00:00
sftp> ls
fichier1 fichier2 fichier3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Téléchargement des fichiers

Un seul fichier utilisant SFTP peut être téléchargé en utilisant la commande get. Voici un exemple où j’ai téléchargé remote_file4 en utilisant sftp :

sftp> pwd
Répertoire de travail distant : /home/ftpuser/remote_test_dir
sftp> lpwd
Répertoire de travail local : /home/abhisheknair/testdir
sftp> ls
fichier_à_distance4
sftp> lls
fichier4
sftp> get remote_file4
Récupération de /home/ftpuser/remote_test_dir/remote_file4 vers remote_file4
/home/ftpuser/remote_test_dir/remote_file4 100% 13 5.2KB/s 00:00
sftp> lls
file4 remote_file4
sftp>

Pour télécharger plusieurs fichiers, utilisez la commande <strong>mget</strong>. Je télécharge ici tous les fichiers qui correspondent au motif remote_file* dans le répertoire de travail distant vers mon répertoire de travail local. J’utilise enfin la commande <strong>lls</strong> pour voir les fichiers téléchargés.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> lpwd
Répertoire de travail local : /home/abhisheknair/testdir
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
file4 remote_file4
sftp> mget remote_file*
Récupération de /home/ftpuser/remote_file1 vers remote_file1
/home/ftpuser/remote_file1 100% 12 5.9KB/s 00:00
Récupération de /home/ftpuser/remote_file2 vers remote_file2
/home/ftpuser/remote_file2 100% 13 5.8KB/s 00:00
Récupération de /home/ftpuser/remote_file3 vers remote_file3
/home/ftpuser/remote_file3 100% 13 7.3KB/s 00:00
sftp> lls
file4 remote_file1 remote_file2 remote_file3 remote_file4
sftp>

Créez un répertoire

Un nouveau répertoire peut être créé sur un serveur distant à l’aide de la commande mkdir.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> mkdir nouveau_dir
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

De même, si vous souhaitez créer un nouveau répertoire dans le répertoire de travail actuel du système local à partir de l’invite sftp, utilisez la commande lmkdir.

sftp> lpwd
Répertoire de travail local : /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lmkdir new_local_dir
sftp> lls
bin file1 file2 file3 lib new_local_dir oci-scripts sys_info.sh test.tgz testdir
sftp>

Supprimer un répertoire

Un répertoire distant vide peut être supprimé à l’aide de la commande rmdir. Notez que si le répertoire n’est pas vide, vous obtiendrez une erreur.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> rmdir nouveau_dir
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Suppression d’un fichier

Un fichier distant peut être supprimé à l’aide de la commande rm.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> ls
fichier1 fichier2 fichier3 fichier_distant1 fichier_distant2 fichier_distant3 répertoire_de_test_distant
sftp> rm remote_file3
Suppression de /home/ftpuser/remote_file3
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp>

Renommer un fichier

Un fichier distant peut également être facilement renommé à l’aide de la commande rename.

sftp> pwd
Répertoire de travail distant : /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp> rename fichier_distant1 nouveau_fichier1
sftp> ls
file1 file2 file3 new_file1 remote_file2 remote_test_dir
sftp>

Utilisation du système de fichiers

Pour afficher les statistiques du répertoire courant ou du système de fichiers contenant “path”, utilisez la commande df. Vous pouvez utiliser le drapeau -h pour afficher les statistiques dans un format lisible par l’homme. Notez que les statistiques affichées concernent le système de fichiers du serveur SFTP distant et non celui de la machine locale.

sftp> df
        Taille Utilisée Disponible (root) Êpacity
    17811456 1845472 15965984 15965984 10%
sftp> df -h
    Taille utilisée Disponibilité (root) Êpacity
  17.0GB 1.8GB 15.2GB 15.2GB 10%
sftp>

Quitter la session SFTP

Pour quitter la session SFTP, utilisez les commandes bye, exit ou quit. Vous reviendrez à l’invite de votre système d’exploitation après avoir quitté SFTP.

sftp> exit
$

Conclusion

SFTP est l’une des meilleures options disponibles, à la fois sûre et facile à utiliser. Il offre des fonctionnalités CLI et GUI et est supporté par différentes plateformes. Reportez-vous à la page de manuel sftp pour plus d’informations.

$ man sftp

Si vous souhaitez en savoir plus, consultez le cours Udemy Linux Mastery.