Comment utiliser SFTP pour transférer des fichiers en toute sécurité avec un serveur distant

Introduction

FTP, le protocole de transfert de fichiers, était une méthode populaire et non cryptée pour transférer des fichiers entre deux systèmes distants. En 2022, il a été obsolète par la plupart des logiciels modernes en raison d’un manque de sécurité et ne peut principalement être utilisé que dans des applications héritées.

SFTP, qui signifie Secure File Transfer Protocol, est un protocole distinct intégré à SSH qui peut implémenter des commandes FTP sur une connexion sécurisée. En général, il peut agir comme un remplacement direct dans tous les contextes où un serveur FTP est encore nécessaire.

Dans presque tous les cas, SFTP est préférable à FTP en raison de ses fonctionnalités de sécurité sous-jacentes et de sa capacité à se greffer sur une connexion SSH. FTP est un protocole non sécurisé qui ne doit être utilisé que dans des cas limités ou sur des réseaux de confiance.

Bien que SFTP soit intégré à de nombreux outils graphiques, ce guide démontrera comment l’utiliser à travers son interface de ligne de commande interactive.

Comment se connecter avec SFTP

Par défaut, SFTP utilise le protocole SSH pour s’authentifier et établir une connexion sécurisée. En raison de cela, les mêmes méthodes d’authentification sont disponibles que celles présentes dans SSH.

Bien que vous puissiez vous authentifier par défaut avec des mots de passe, nous vous recommandons de créer des clés SSH et de transférer votre clé publique vers tout système auquel vous avez besoin d’accéder. C’est beaucoup plus sécurisé et peut vous faire gagner du temps à long terme.

Veuillez consulter ce guide pour configurer des clés SSH afin d’accéder à votre serveur si vous ne l’avez pas déjà fait.

Si vous pouvez vous connecter à la machine en utilisant SSH, alors vous avez rempli toutes les exigences nécessaires pour utiliser SFTP pour gérer les fichiers. Testez l’accès SSH avec la commande suivante:

  1. ssh sammy@your_server_ip_or_remote_hostname

Si cela fonctionne, sortez en tapant:

  1. exit

Maintenant, nous pouvons établir une session SFTP en émettant la commande suivante:

  1. sftp sammy@your_server_ip_or_remote_hostname

Vous vous connecterez au système distant et votre invite changera en une invite SFTP.

Si vous travaillez sur un port SSH personnalisé (pas le port par défaut 22), vous pouvez ouvrir une session SFTP comme suit:

  1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

Cela vous connectera au système distant via le port spécifié.

Obtenir de l’aide en SFTP

La commande la plus utile à apprendre en premier est la commande d’aide. Cela vous donne accès à un résumé des autres commandes SFTP. Vous pouvez l’appeler en tapant l’une de ces commandes à l’invite:

  1. help

ou

  1. ?

Cela affichera une liste des commandes disponibles:

Output
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' . . .

Nous allons explorer certaines des commandes que vous voyez dans les sections suivantes.

Nous pouvons naviguer dans la hiérarchie de fichiers du système distant en utilisant un certain nombre de commandes qui fonctionnent de manière similaire à leurs homologues shell.

Tout d’abord, orientons-nous en découvrant dans quel répertoire nous nous trouvons actuellement sur le système distant. Tout comme dans une session shell typique, nous pouvons taper ce qui suit pour obtenir le répertoire actuel:

  1. pwd
Output
Remote working directory: /home/demouser

Nous pouvons voir le contenu du répertoire actuel du système distant avec une autre commande familière:

  1. ls
Output
Summary.txt info.html temp.txt testDirectory

Notez que les commandes disponibles dans l’interface SFTP ne correspondent pas exactement à la syntaxe shell typique et ne sont pas aussi riches en fonctionnalités. Cependant, elles implémentent certains des indicateurs facultatifs les plus importants, tels que l’ajout de -la à ls pour afficher plus de métadonnées de fichiers et de permissions:

  1. ls -la
Output
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 . . .

Pour accéder à un autre répertoire, nous pouvons émettre cette commande:

  1. cd testDirectory

Nous pouvons maintenant parcourir le système de fichiers distant, mais que faire si nous devons accéder à notre système de fichiers local? Nous pouvons diriger les commandes vers le système de fichiers local en les précédant d’un l pour local.

Toutes les commandes discutées jusqu’à présent ont des équivalents locaux. Nous pouvons afficher le répertoire de travail local:

  1. lpwd
Output
Local working directory: /Users/demouser

Nous pouvons lister le contenu du répertoire actuel sur la machine locale:

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

Nous pouvons également changer le répertoire avec lequel nous voulons interagir sur le système local:

  1. lcd Desktop

Transfert de fichiers avec SFTP

Si nous voulons télécharger des fichiers depuis notre hôte distant, nous pouvons le faire en utilisant la commande get:

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

Comme vous pouvez le voir, par défaut, la commande get télécharge un fichier distant vers un fichier portant le même nom sur le système de fichiers local.

Nous pouvons copier le fichier distant sous un nom différent en spécifiant le nom par la suite:

  1. get remoteFile localFile

La commande get accepte également certains indicateurs d’options. Par exemple, nous pouvons copier un répertoire et tous ses contenus en spécifiant l’option récursive:

  1. get -r someDirectory

Nous pouvons demander à SFTP de conserver les autorisations appropriées et les horodatages en utilisant le drapeau -P ou -p:

  1. get -Pr someDirectory

Transfert de fichiers locaux vers le système distant

Le transfert de fichiers vers le système distant fonctionne de la même manière, mais avec une commande put:

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

Les mêmes indicateurs d’options qui fonctionnent avec get s’appliquent à put. Ainsi, pour copier un répertoire local entier, vous pouvez exécuter put -r:

  1. put -r localDirectory

Un outil familier qui est utile lors du téléchargement et de l’envoi de fichiers est la commande df, qui fonctionne de manière similaire à la version en ligne de commande. En utilisant cela, vous pouvez vérifier que vous avez suffisamment d’espace pour effectuer les transferts qui vous intéressent :

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

Veuillez noter qu’il n’y a pas de variation locale de cette commande, mais nous pouvons contourner cela en utilisant la commande !.

La commande ! nous laisse tomber dans un shell local, où nous pouvons exécuter n’importe quelle commande disponible sur notre système local. Nous pouvons vérifier l’utilisation du disque en tapant :

  1. !

et ensuite

  1. df -h
Output
Filesystem Size Used Avail Capacity Mounted on /dev/disk0s2 595Gi 52Gi 544Gi 9% / devfs 181Ki 181Ki 0Bi 100% /dev map -hosts 0Bi 0Bi 0Bi 100% /net map auto_home 0Bi 0Bi 0Bi 100% /home

N’importe quelle autre commande locale fonctionnera comme prévu. Pour revenir à votre session SFTP, tapez :

  1. exit

Vous devriez maintenant voir le retour de l’invite SFTP.

Manipulations de fichiers simples avec SFTP

SFTP vous permet d’effectuer certains types de maintenance du système de fichiers. Par exemple, vous pouvez changer le propriétaire d’un fichier sur le système distant avec :

  1. chown userID file

Remarquez comment, contrairement à la commande système chmod, la commande SFTP n’accepte pas les noms d’utilisateur, mais utilise plutôt les UID. Malheureusement, il n’y a pas de moyen intégré de connaître l’UID approprié à partir de l’interface SFTP.

Comme solution de contournement, vous pouvez lire à partir du fichier /etc/passwd, qui associe les noms d’utilisateur aux UID dans la plupart des environnements Linux :

  1. get /etc/passwd
  2. !less passwd
Output
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . .

Remarquez comment, au lieu de donner la commande ! seule, nous l’avons utilisée comme préfixe pour une commande shell locale. Cela fonctionne pour exécuter n’importe quelle commande disponible sur notre machine locale et aurait pu être utilisé avec la commande locale df précédemment.

L’UID sera dans la troisième colonne du fichier, comme délimité par des caractères de deux-points.

De même, nous pouvons changer le propriétaire du groupe d’un fichier avec :

  1. chgrp groupID file

Encore une fois, il n’y a pas de moyen intégré pour obtenir une liste des groupes du système distant. Nous pouvons contourner cela avec la commande suivante :

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

La troisième colonne contient l’ID du groupe associé au nom dans la première colonne. C’est ce que nous recherchons.

La commande chmod de SFTP fonctionne normalement sur le système de fichiers distant:

  1. chmod 777 publicFile
Output
Changing mode on /home/demouser/publicFile

Il n’existe pas de commande équivalente pour manipuler les permissions de fichier locales, mais vous pouvez définir le umask local, de sorte que tous les fichiers copiés sur le système local auront leurs permissions correspondantes.

Cela peut être fait avec la commande lumask:

  1. lumask 022
Output
Local umask: 022

Maintenant, tous les fichiers réguliers téléchargés (tant que le drapeau -p n’est pas utilisé) auront des permissions 644.

SFTP vous permet également de créer des répertoires sur les systèmes local et distant avec lmkdir et mkdir respectivement.

Le reste des commandes de fichier cible uniquement le système de fichiers distant:

  1. ln
  2. rm
  3. rmdir

Ces commandes reproduisent le comportement de base de leurs équivalents shell. Si vous devez effectuer ces actions sur le système de fichiers local, n’oubliez pas que vous pouvez passer à un shell en émettant cette commande :

  1. !

Ou exécutez une seule commande sur le système local en préfixant la commande avec ! comme ceci :

  1. !chmod 644 somefile

Lorsque vous avez terminé votre session SFTP, utilisez exit ou bye pour fermer la connexion.

  1. bye

Conclusion

Bien que la syntaxe SFTP soit beaucoup moins complète que les outils shell modernes, elle peut être utile pour assurer la compatibilité avec la syntaxe FTP héritée ou pour limiter soigneusement les fonctionnalités disponibles pour les utilisateurs distants de certains environnements.

Par exemple, vous pouvez utiliser SFTP pour permettre à certains utilisateurs de transférer des fichiers sans accès SSH. Pour plus d’informations sur ce processus, consultez notre tutoriel sur Comment Activer SFTP Sans Accès Shell.

Si vous avez l’habitude d’utiliser FTP ou SCP pour effectuer vos transferts, SFTP est un bon moyen de tirer parti des points forts des deux. Bien qu’il ne convienne pas à toutes les situations, c’est un outil flexible à avoir dans votre répertoire.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server