Aller au contenu principal

sftp-config

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

  2. Introduction

FTP, le protocole de transfert de fichiers, était une méthode populaire et non cryptée de transfert de fichiers entre deux systèmes distants. En 2022, il a été déprécié par la plupart des logiciels modernes en raison d'un manque de sécurité, et ne peut généralement être utilisé que dans des applications héritées du passé.

SFTP, qui signifie Secure File Transfer Protocol, est un protocole séparé intégré dans SSH qui peut implémenter des commandes FTP sur une connexion sécurisée. Typiquement, il peut agir comme un remplacement d'entrée dans n'importe quel contexte où un serveur FTP est encore nécessaire.

Dans presque tous les cas, SFTP est préférable à FTP en raison de ses caractéristiques de sécurité sous-jacentes et de sa capacité à se rabattre 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 en qui vous avez confiance.

Bien que le SFTP soit intégré dans de nombreux outils graphiques, ce guide montrera comment l'utiliser via son interface de ligne de commande interactive.

Comment se connecter au SFTP

Par défaut, SFTP utilise le protocole SSH pour s'authentifier et établir une connexion sécurisée. De ce fait, les mêmes méthodes d'authentification sont disponibles qui sont présentes dans SSH.

Bien que vous puissiez vous authentifier avec des mots de passe par défaut, nous vous recommandons de créer des clés SSH et de transférer votre clé publique vers n'importe quel système auquel vous devez accéder.

Si vous pouvez vous connecter à la machine en utilisant SSH, vous avez rempli toutes les exigences nécessaires pour utiliser SFTP pour gérer les fichiers.

ssh ubuntu@192.168.50.22

Si cela fonctionne, revenez en dactylographiant:

exit

Nous pouvons maintenant établir une session SFTP en publiant la commande suivante:

sftp ubuntu@192.168.50.22

Vous allez connecter le système distant et votre prompte passera à 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:

sftp -oPort=44 ubuntu@192.168.50.22

Cela vous connectera au système distant par le biais de votre port spécifié.

Obtenir de l'aide dans le cadre du 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'un ou l'autre de ceux-ci dans l'invite:

sftp> help
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.

  1. Tout d'abord, orientons-nous en découvrons dans quel répertoire nous sommes actuellement sur le système distant.

Tout comme dans une session de shell typique, nous pouvons taper ce qui suit pour obtenir le répertoire actuel:

Dans shell sftp (sftp ubuntu@192.168.50.22)

pwd

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

ls
# OU
ls -la

Notez que les commandes disponibles dans l'interface SFTP ne sont pas une correspondance 1:1 pour la syntaxe de shell typique et ne sont pas aussi riches en fonctionnalités. Cependant, ils mettent en œuvre certains des drapeaux facultatifs les plus importants, comme l'ajout -laà lspour afficher plus de métadonnées et de permissions de fichier:

ls -la

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

cd testDirectory

Nous pouvons maintenant traverser le système de fichiers distant, mais que se passe-t-il si nous avons besoin d'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 avec un lpour le local.

Tous les ordres discutés jusqu'à présent ont des équivalents locaux. Nous pouvons imprimer le répertoire de travail local:

lpwd

On peut énumérer le contenu du répertoire actuel sur la machine locale:

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:

lcd Desktop

Transfert de fichiers avec SFTP

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

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, le get Une commande télécharge un fichier distant sur un fichier portant le même nom sur le système de fichiers local.

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

get remoteFile localFile

Le get La commande accepte également certains drapeaux d'option. Par exemple, nous pouvons copier un répertoire et l'ensemble de son contenu en spécifiant l'option récursive:

get -r someDirectory

Nous pouvons dire au SFTP de maintenir les autorisations et les temps d'accès appropriés en utilisant -P ou ***-p *** flag :

get -Pr someDirectory

Transfert de fichiers locaux au système distant

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

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

Les mêmes drapeaux qui fonctionnent avec get s'appliquent à put . Donc pour copier un répertoire local entier, vous pouvez exécuter put -r:

put -r localDirectory

Un outil familier qui est utile pour le téléchargement et le téléchargement de fichiers est le df commande, qui fonctionne de manière similaire à la version de ligne de commande.

cela, vous pouvez vérifier que vous avez assez d'espace pour compléter les transferts qui vous intéressent:

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

euillez noter qu'il n'y a pas de variation locale de cette commande, mais nous pouvons contourner cela en publiant le ! commandement.

Le ! La commande nous dépose dans un obus local, où nous pouvons exécuter n'importe quelle commande disponible sur notre système local. On peut vérifier l'utilisation du disque en tapant:

# On tape d'abord le ! 
!
# En suite dh -h
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

Tout autre commandement local fonctionnera comme prévu. Pour revenir à votre session SFTP, tapez:

exit

Manipulations de fichiers simples avec SFTP

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

chown userID file

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

En guise de solution de contournement, vous pouvez lire à partir du /etc/passwdfichier, qui associe des noms d'utilisateur à UID dans la plupart des environnements Linux:

get /etc/passwd
!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
man:x:6:12:man:/var/cache/man:/bin/sh

Remarquez comment, au lieu de donner le ! commande par elle-même, nous l'avons utilisé comme préfixe pour une commande de shell locale.

Cela fonctionne pour exécuter n'importe quelle commande disponible sur notre machine locale et aurait pu être utilisé avec le local df commander plus tôt.

L'UID sera dans la troisième colonne du fichier, tel que délimité par des caractères du colon.

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

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 travailler autour de lui avec la commande suivante:

get /etc/group
!less group
Output
root:x:0:
daemon:x:1:
bin:x:2:

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

Le chmodLa commande SFTP fonctionne normalement sur le système de fichiers distant:

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

Il n'y a pas de commande équivalente pour manipuler les autorisations de fichier local, mais vous pouvez définir l'umask local, de sorte que tous les fichiers copiés dans le système local auront leurs permissions correspondantes.

Cela peut être fait avec le lumask commande:

lumask 022
Output
Local umask: 022

Maintenant, tous les fichiers réguliers téléchargés (tant que le -pdrapeau n'est pas utilisé) aura 644 permissions.

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

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

ln
rm
rmdir

Ces commandes reproduisent le comportement de base de leurs équivalents shell. Si vous avez besoin d'effectuer ces actions sur le système de fichiers local, n'oubliez pas que vous pouvez tomber dans un shell en émettant cette commande:

sftp> ?

Ou exécuter une commande unique sur le système local en préfaçant la commande avec !Comme ainsi :

!chmod 644 somefile

Lorsque vous avez terminé votre session SFTP, utilisez exitou byefermer la connexion.

bye

Conclusion

Bien que la syntaxe SFTP soit beaucoup moins complète que l'outillage de shell moderne, elle peut être utile pour fournir une compatibilité avec l'ancienne syntaxe FTP ou pour limiter soigneusement la fonctionnalité disponible pour les utilisateurs distants de certains environnements.