Comment transférer des fichiers de manière sécurisée en utilisant SCP et SFTP avec SSH

Maîtrisez l'art du transfert sécurisé de fichiers via SSH. Ce guide complet détaille les différences, les avantages et les inconvénients du protocole de copie sécurisée (SCP) et du protocole de transfert de fichiers SSH (SFTP). Apprenez la syntaxe de ligne de commande essentielle pour les deux méthodes, y compris des exemples de transferts de local à distant et de distant à local. Nous abordons également les meilleures pratiques de sécurité essentielles, telles que l'authentification par clé SSH et la restriction d'utilisateur, garantissant que vos données restent chiffrées et protégées lors de chaque transfert.

37 vues

Comment transférer des fichiers en toute sécurité en utilisant SCP et SFTP avec SSH

Le transfert de fichiers entre les systèmes locaux et distants est une exigence fondamentale de l'administration système et du développement. Cependant, l'utilisation de protocoles non chiffrés comme FTP standard ou les commandes R expose des données sensibles à l'interception et aux attaques. Le protocole Secure Shell (SSH) fournit deux méthodes robustes et chiffrées pour le transfert de fichiers : le Secure Copy Protocol (SCP) et le SSH File Transfer Protocol (SFTP).

Ce guide détaille comment SCP et SFTP exploitent le chiffrement SSH pour garantir l'intégrité et la confidentialité des données pendant le transit. Nous explorerons les forces et les faiblesses de chaque protocole, fournirons des exemples pratiques en ligne de commande et décrirons les meilleures pratiques de sécurité essentielles pour une gestion sécurisée des fichiers.

Comprendre les fondations : SSH

SCP et SFTP utilisent tous deux SSH (fonctionnant généralement sur le port 22) comme couche de transport sous-jacente. Lorsque vous initiez un transfert avec l'un ou l'autre protocole, SSH établit d'abord un tunnel sécurisé et chiffré entre le client et le serveur. Toutes les données, y compris les identifiants d'authentification et le contenu des fichiers, sont transmises par ce tunnel, faisant des deux méthodes des alternatives hautement sécurisées aux protocoles de transfert de fichiers obsolètes.

Principales fonctionnalités fournies par la fondation SSH :

  • Chiffrement : Toutes les données sont chiffrées de bout en bout.
  • Authentification : Prend en charge l'authentification par mot de passe et l'authentification par paire de clés publique/privée, beaucoup plus sécurisée.
  • Intégrité : Utilise le hachage cryptographique pour garantir que les fichiers ne sont pas modifiés pendant le transfert.

Secure Copy Protocol (SCP)

SCP est un protocole réseau basé sur le protocole de copie à distance (rcp) mais encapsulé dans la sécurité de SSH. Il est conçu pour la simplicité et la rapidité, ce qui le rend idéal pour les transferts rapides et non interactifs, en particulier dans les scripts ou l'automatisation.

Fonctionnalités et caractéristiques de SCP

  1. Simplicité : Utilise une syntaxe très similaire à la commande Unix standard cp.
  2. Vitesse : Généralement plus rapide que SFTP car il ne nécessite pas d'accusés de réception interactifs ni de configuration de session, ne reposant que sur le tunnel SSH sous-jacent.
  3. Non interactif : Une fois démarré, le transfert s'exécute jusqu'à son achèvement sans possibilité de gérer la session ou d'interrompre l'état du transfert.

Commandes SCP pratiques

La syntaxe générale de SCP est scp [options] [source] [destination].

1. Copie d'un fichier du serveur local vers le serveur distant

Pour pousser un fichier local dans le répertoire personnel d'un utilisateur distant :

scp /chemin/vers/fichier/local.txt utilisateur@hote_distant:/home/utilisateur/destination/

2. Copie d'un fichier du système distant vers le système local

Pour tirer un fichier du serveur vers votre répertoire actuel :

scp utilisateur@hote_distant:/var/log/system.log . 
# Note : Le '.' indique le répertoire local actuel

3. Copie d'un répertoire entier (récursif)

Utilisez le drapeau -r (récursif) pour copier les répertoires et tout leur contenu :

scp -r /chemin/vers/dossier/local/ utilisateur@hote_distant:/data/backups/

4. Spécification d'un port non standard

Si votre démon SSH s'exécute sur un port autre que 22, utilisez l'option -P (notez le P majuscule) :

scp -P 2222 fichier_local.zip utilisateur@hote_distant:/tmp/

Note sur l'obsolescence de SCP : Bien que très utile, SCP est considéré comme un protocole obsolète. Les systèmes modernes recommandent de plus en plus d'utiliser SFTP ou Rsync sur SSH en raison de vulnérabilités connues dans la conception du protocole SCP, en particulier concernant la manipulation des noms de fichiers.

SSH File Transfer Protocol (SFTP)

SFTP est un sous-système de SSH qui fournit un environnement plus riche et interactif pour la gestion des fichiers. Contrairement à SCP, qui est purement un outil de copie, SFTP est un protocole avec état qui permet un contrôle de session détaillé, le listage, la suppression, le renommage de fichiers et la création de répertoires — similaire à une session FTP améliorée, mais entièrement sécurisée.

Fonctionnalités et caractéristiques de SFTP

  1. Session interactive : Les transferts se déroulent dans une session shell dédiée et interactive.
  2. Robustesse : Prend en charge la recherche, la reprise et la gestion des transferts individuels au sein de la session.
  3. Gestion complète : Permet de lister (ls), de changer de répertoire (cd), et de manipuler des fichiers distants et locaux en utilisant les commandes de session (put, get, lcd, lmkdir).
  4. Sécurité : Très fiable et considéré comme la norme pour les transferts de fichiers sécurisés modernes.

Commandes SFTP pratiques

1. Démarrage d'une connexion SFTP

Lancez une session interactive vers le serveur distant :

sftp utilisateur@hote_distant

Si vous utilisez un port spécifique :

sftp -P 2222 utilisateur@hote_distant

2. Commandes SFTP interactives

Une fois connecté, vous opérez par défaut dans l'environnement distant. Utilisez les commandes pour gérer les transferts et les répertoires :

Commande Description Exemple
ls Lister les fichiers distants ls -l
cd Changer de répertoire distant cd /var/www/html
put Télécharger un fichier (Local vers Distant) put donnees_locales.zip
get Télécharger un fichier (Distant vers Local) get sauvegarde_serveur.tar.gz
lcd Changer de répertoire local lcd /Utilisateurs/moi/telechargements
lpwd Afficher le répertoire de travail local lpwd
mkdir Créer un répertoire distant mkdir nouveau_projet
quit Quitter la session SFTP quit

Exemple : Téléchargement et déchargement dans une session SFTP

$ sftp administrateur_sys@serveur_sauvegarde
sftp> cd /data/backups
sftp> lcd /home/local/rapports
sftp> put rapport_quotidien.csv  # Télécharge le fichier
Uploading rapport_quotidien.csv to /data/backups/rapport_quotidien.csv
rapport_quotidien.csv                                      100% 512 Ko   4.3 Mo/s   00:00    
sftp> get configuration.yaml  # Télécharge un fichier
Fetching /data/backups/configuration.yaml to configuration.yaml
configuration.yaml                                    100% 20 Ko    1.1 Mo/s   00:00    
sftp> quit

SCP vs SFTP : Choisir le bon outil

Bien que les deux protocoles soient sécurisés, ils répondent à des besoins opérationnels différents :

Caractéristique Secure Copy Protocol (SCP) SSH File Transfer Protocol (SFTP)
Mécanisme Protocole de copie simple (Non interactif) Protocole de gestion de fichiers interactif (Avec état)
Cas d'utilisation Transferts rapides de fichiers uniques ; scripts/automatisation. Transferts complexes ; gestion de répertoires ; sessions interactives.
Vitesse Généralement plus rapide en raison d'une surcharge plus faible. Légèrement plus lent en raison des échanges interactifs.
Reprise Mal supporté ou inexistant. Prend entièrement en charge la reprise des transferts et la recherche.
Statut de sécurité Obsolète (Certaines vulnérabilités du protocole). Standard moderne et robuste.

Quand utiliser SCP : Utilisez SCP lorsque vous avez besoin d'une vitesse maximale pour un transfert de fichier simple et que vous exécutez la commande dans un script où la non-interactivité est préférée.

Quand utiliser SFTP : Utilisez SFTP pour pratiquement tous les transferts de fichiers manuels, lorsque vous devez gérer plusieurs fichiers, changer de répertoire, ou lorsque vous avez besoin de robustesse de session et de fonctionnalités de sécurité modernes.

Meilleures pratiques pour les transferts de fichiers sécurisés

L'utilisation de SCP ou SFTP n'est que la première étape. Une configuration de sécurité appropriée sur le serveur SSH est essentielle pour protéger l'environnement distant.

1. Privilégier l'authentification par clé SSH

L'authentification par mot de passe est vulnérable aux attaques par force brute. Utilisez toujours des paires de clés SSH publiques/privées pour authentifier les transferts de fichiers. L'utilisation de clés élimine le risque de compromission des mots de passe lors des transferts automatisés ou manuels.

Génération de clés (si nécessaire) :

ssh-keygen -t rsa -b 4096

Utilisation d'une clé spécifique pour le transfert :

scp -i ~/.ssh/ma_cle_transfert fichier.txt utilisateur@hote_distant:/tmp/
# ou
sftp -i ~/.ssh/ma_cle_transfert utilisateur@hote_distant

2. Désactiver la connexion root

Ne jamais autoriser les transferts de fichiers directs à l'aide de l'utilisateur root. Les transferts doivent toujours être effectués par un compte utilisateur dédié à privilèges réduits. Si un accès administratif est nécessaire, les fichiers peuvent être déplacés vers l'emplacement approprié après le transfert en utilisant sudo localement sur la machine distante.

3. Restreindre l'accès à l'aide de ChrootDirectory (SFTP)

Pour les systèmes qui fournissent un accès SFTP à des utilisateurs externes ou non fiables, implémentez des restrictions ChrootDirectory dans le fichier sshd_config. Cela verrouille l'utilisateur SFTP dans un répertoire spécifique, l'empêchant de parcourir le reste du système de fichiers.

Exemple d'extrait de configuration dans /etc/ssh/sshd_config :

Match User utilisateur_sftp_externe
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. Limiter les permissions

Assurez-vous que le compte utilisateur utilisé pour les transferts ne dispose que des autorisations minimales nécessaires à sa tâche (Principe du moindre privilège). Si un utilisateur n'a besoin que de télécharger des fichiers dans /data/uploads, assurez-vous qu'il ne peut pas supprimer de fichiers dans /etc/config.

Conclusion

SSH fournit la couche de sécurité essentielle nécessaire aux opérations distantes dignes de confiance. Bien que SCP reste une option rapide et simple pour les copies scriptées, SFTP offre l'ensemble de fonctionnalités supérieur, le contrôle interactif et la robustesse moderne requis pour une gestion complète des fichiers. En exploitant l'authentification par clé et une configuration côté serveur appropriée, les administrateurs système peuvent garantir que leurs transferts de fichiers sont non seulement fonctionnels, mais entièrement sécurisés.