Comment transférer des fichiers de manière sécurisée en utilisant SCP et SFTP avec SSH
Transférez des fichiers en toute sécurité avec SCP et SFTP via SSH, y compris des commandes pratiques, l'authentification par clé et des contrôles d'accès côté serveur plus sûrs.
Comment transférer des fichiers en toute sécurité avec SCP et SFTP via SSH
Transférer des fichiers entre des 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 le FTP standard ou les commandes R expose les 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 explique quand utiliser SCP, quand utiliser SFTP, et comment éviter les erreurs courantes qui rendent le transfert sécurisé de fichiers moins sûr en pratique.
Comprendre les bases : SSH
SCP et SFTP utilisent tous deux SSH (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 via ce tunnel, ce qui rend les deux méthodes très sécurisées par rapport aux protocoles de transfert de fichiers hérités.
Fonctionnalités clés fournies par la base 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, bien 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é avec la sécurité de SSH. Il est conçu pour la simplicité et la vitesse, 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
- Simplicité : Utilise une syntaxe très similaire à la commande Unix standard
cp. - Vitesse : Souvent rapide pour les copies simples uniques, bien que les performances dépendent de l'implémentation SSH, du chiffrement, du réseau et de l'ensemble de fichiers.
- Non interactif : Une fois démarré, le transfert s'exécute jusqu'à la fin 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. Copier un fichier du local vers le serveur distant
Pour envoyer un fichier local vers le répertoire personnel d'un utilisateur distant :
scp /chemin/vers/fichier_local.txt utilisateur@hôte_distant:/home/utilisateur/destination/
2. Copier un fichier du distant vers le système local
Pour récupérer un fichier du serveur vers votre répertoire courant :
scp utilisateur@hôte_distant:/var/log/system.log .
# Remarque : Le '.' indique le répertoire local courant
3. Copier 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@hôte_distant:/data/sauvegardes/
4. Spécifier un port non standard
Si votre démon SSH s'exécute sur un port autre que 22, utilisez le drapeau -P (notez le P majuscule) :
scp -P 2222 fichier_local.zip utilisateur@hôte_distant:/tmp/
Remarque sur SCP : Le comportement traditionnel du protocole SCP a un historique de risques liés aux noms de fichiers et à la gestion des chemins. Certains clients OpenSSH modernes utilisent SFTP en interne pour
scppar défaut, mais tous les clients ou serveurs ne se comportent pas de la même manière. Pour les nouveaux flux de travail, préférez SFTP ou rsync via SSH sauf si vous avez spécifiquement besoin de la compatibilité SCP.
SSH File Transfer Protocol (SFTP)
SFTP est un sous-système de SSH qui fournit un environnement interactif plus riche pour la gestion de fichiers. Contrairement à SCP, qui est purement un outil de copie, SFTP est un protocole avec état qui permet de lister, supprimer, renommer des fichiers et créer des répertoires via la même connexion protégée par SSH.
Fonctionnalités et caractéristiques de SFTP
- Session interactive : Les transferts se produisent dans une session shell interactive dédiée.
- Robustesse : Prend en charge la recherche, la reprise et la gestion des transferts individuels au sein de la session.
- Gestion complète : Permet de lister (
ls), changer de répertoire (cd) et manipuler des fichiers locaux et distants à l'aide de commandes de session (put,get,lcd,lmkdir). - Sécurité : Utilise SSH pour le transport et constitue le meilleur choix par défaut pour les transferts de fichiers interactifs modernes.
Commandes SFTP pratiques
1. Initier une connexion SFTP
Démarrez une session interactive vers le serveur distant :
sftp utilisateur@hôte_distant
Si vous utilisez un port spécifique :
sftp -P 2222 utilisateur@hôte_distant
2. Commandes interactives SFTP
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éverser un fichier (Local vers Distant) | put données_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/téléchargements |
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éversement et téléchargement dans une session SFTP
$ sftp admin_sys@serveur_sauvegarde
sftp> cd /data/sauvegardes
sftp> lcd /home/local/rapports
sftp> put rapport_quotidien.csv # Téléverse le fichier
Téléversement de rapport_quotidien.csv vers /data/sauvegardes/rapport_quotidien.csv
rapport_quotidien.csv 100% 512KB 4.3MB/s 00:00
sftp> get configuration.yaml # Télécharge un fichier
Récupération de /data/sauvegardes/configuration.yaml vers configuration.yaml
configuration.yaml 100% 20KB 1.1MB/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 :
| Fonctionnalité | 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 de fichiers uniques rapides ; scripts/automatisation. | Transferts complexes ; gestion de répertoires ; sessions interactives. |
| Vitesse | Souvent bonne pour les copies simples. | Généralement assez rapide, avec plus de fonctionnalités de gestion de fichiers. |
| Reprise | Limitée ; utilisez un autre outil pour un comportement de reprise robuste. | Prend en charge des opérations de transfert plus contrôlées, mais le comportement de reprise du client varie. |
| Statut de sécurité | Outil de compatibilité ; le protocole traditionnel présente des problèmes de conception. | Meilleur choix par défaut pour le transfert de fichiers géré via SSH. |
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 nécessitez une robustesse de session et des fonctionnalités de sécurité modernes.
Meilleures pratiques pour les transferts de fichiers sécurisés
Utiliser 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. Prioriser 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 publique/privée pour authentifier les transferts de fichiers. L'utilisation de clés élimine le risque de compromission du mot de passe lors des transferts automatisés ou manuels.
Génération de clés (si nécessaire) :
ssh-keygen -t ed25519 -C "transfert-fichier"
Utilisation d'une clé spécifique pour le transfert :
scp -i ~/.ssh/ma_cle_transfert fichier.txt utilisateur@hôte_distant:/tmp/
# ou
sftp -i ~/.ssh/ma_cle_transfert utilisateur@hôte_distant
2. Désactiver la connexion root
N'autorisez jamais les transferts de fichiers directs avec l'utilisateur root. Les transferts doivent toujours être effectués par un compte utilisateur dédié et à privilèges limités. 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 avec ChrootDirectory (SFTP)
Pour les systèmes fournissant 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 dispose uniquement des permissions minimales nécessaires à sa tâche (Principe du moindre privilège). Si un utilisateur a seulement besoin de téléverser des fichiers vers /data/uploads, assurez-vous qu'il ne peut pas supprimer des fichiers dans /etc/config.
À retenir
Utilisez SFTP comme outil par défaut lorsque vous devez parcourir, téléverser, télécharger ou gérer des fichiers de manière interactive. Utilisez SCP pour les cas de compatibilité simples où vous faites confiance au serveur et comprenez le comportement du client. Dans les deux cas, associez la commande à des clés SSH, des comptes à privilèges minimaux et des permissions de répertoire strictes.