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:
Si cela fonctionne, sortez en tapant:
Maintenant, nous pouvons établir une session SFTP en émettant la commande suivante:
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:
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:
ou
Cela affichera une liste des commandes disponibles:
OutputAvailable 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.
Naviguer avec SFTP
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:
OutputRemote working directory: /home/demouser
Nous pouvons voir le contenu du répertoire actuel du système distant avec une autre commande familière:
OutputSummary.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:
Outputdrwxr-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:
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:
OutputLocal working directory: /Users/demouser
Nous pouvons lister le contenu du répertoire actuel sur la machine locale:
OutputDesktop 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:
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
:
OutputFetching /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:
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:
Nous pouvons demander à SFTP de conserver les autorisations appropriées et les horodatages en utilisant le drapeau -P
ou -p
:
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
:
OutputUploading 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
:
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 :
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 :
et ensuite
OutputFilesystem 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 :
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 :
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 :
Outputroot: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 :
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 :
Outputroot: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:
OutputChanging 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
:
OutputLocal 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:
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 :
Ou exécutez une seule commande sur le système local en préfixant la commande avec !
comme ceci :
Lorsque vous avez terminé votre session SFTP, utilisez exit
ou bye
pour fermer la connexion.
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.