tuto vagrant transferer des fichiers vm hote
  • 11 août 2026
  • ComputaSYS
  • 0


Dans ce tutoriel, nous allons voir deux méthodes pour échanger des fichiers entre une machine virtuelle gérée par Vagrant et son hôte.

Travailler avec Vagrant implique régulièrement d’échanger des fichiers entre votre machine hôte et les machines virtuelles gérées. Que ce soit pour déployer des scripts de configuration, synchroniser du code source, récupérer des logs, etc. Il faut savoir que des outils intégrés à Vagrant existent pour cela, les deux principaux sont : 

L’utilisation du plugin vagrant-scp pour des transferts ponctuels en ligne de commande.

Les dossiers partagés (synced_folders) pour une synchronisation automatique et transparente.

Nous allons ici étudier les deux méthodes ainsi que l’intérêt de chacune. Les prérequis pour appliquer ce tutoriel sont les suivants :

Vagrant doit être installé et fonctionnel sur votre système ;

Une machine virtuelle Vagrant déjà créée et démarrée.

Utiliser vagrant-scp pour des transferts ponctuels

Installation du plugin

La commande vagrant scp est une commande simple qui copie des fichiers entre votre machine hôte et une VM Vagrant, sans configuration préalable au niveau des VM gérées. Cette commande est utilisable à l’aide d’un plugin. Le plugin vagrant-scp n’est pas inclus par défaut dans Vagrant. Pour l’installer, nous allons exécuter la commande suivante pour l’installer sur l’hôte Vagrant :

vagrant plugin install vagrant-scp

Nous pouvons ensuite vérifier que le plugin est bien installé avec :

$ vagrant plugin list

[…]
vagrant-scp (0.5.9, global)

Comme dans mon exemple, le plugin vagrant-scp doit apparaître dans la liste.

Syntaxe de base vagrant-scp

La commande pour transférer un fichier de l’hôte vers la VM Vagrant est aussi simple que l’utilisation de la commande scp classique sous Linux :

vagrant scp :

Il faut savoir que par défaut au déploiement d’une VM, Vagrant va générer une paire de clés lui permettant d’avoir un accès SSH au système en tant que l’utilisateur vagrant. C’est cette paire de clés qui est utilisée pour le transfert de fichiers via le plugin scp, mais aussi pour l’envoi de commande.

Cela signifie que par défaut, la commande vagrant scp utilise les droits de l’utilisateur vagrant, vous ne pourrez donc pas déposer vos fichiers n’importe où.

Voici un exemple avec un fichier situé dans le dossier courant au niveau de l’hôte :

$ vagrant scp ./mon_script.sh debian1:/home/vagrant/

Mon_script.sh 100%   13    52.4KB/s   00:00

Cette commande a copié le fichier mon_script.sh depuis mon répertoire courant vers /home/vagrant/ dans la VM debian1. On peut ensuite confirmer que le fichier est bien présent au sein de la VM :

$ vagrant ssh debian1 -c “pwd;ls -l”

/home/vagrant
total 8
-rw-r–r– 1 vagrant vagrant 445 Jun 30 20:02 index.html
-rw-r–r– 1 vagrant vagrant  13 Jul  1 20:19 mon_script.sh

Bien sûr, vous pouvez faire l’opération inverse et télécharger un fichier depuis votre VM vers votre hôte aussi facilement : 

vagrant scp :

# Exemple
vagrant scp debian1:mon_script.sh ~/

# ou
vagrant scp debian1:/home/vagrant/mon_script.sh ~/

Attention, vagrant-scp ne gère pas nativement les dossiers. Pour contourner ce problème, nous pouvons compresser le dossier avant de le transférer, puis utiliser l’exécution de commande pour faire l’opération inverse. Exemple avec un dossier scripts/ :

# De l’hôte vers la VM
$ tar -czf scripts.tar.gz scripts/ | vagrant scp scripts.tar.gz debian1:/home/vagrant/

scripts.tar.gz 100%  193   386.9KB/s   00:00    

$ vagrant ssh debian1 -c “tar zxvf scripts.tar.gz”
$ vagrant ssh debian1 -c “pwd;ls -l”

/home/vagrant
total 16
drwxr-xr-x 2 vagrant vagrant 4096 Jul  1 20:23 scripts
-rw-r–r– 1 vagrant vagrant  193 Jul  1 20:25 scripts.tar.gz

Bonnes pratiques, limites et erreurs courantes

Voici quelques bonnes pratiques pour éviter les erreurs et incompréhensions lors de l’utilisation de cette commande  : 

Utilisez des chemins absolus pour éviter les erreurs.

Vérifiez le nom de la VM avec vagrant status si vous avez plusieurs VMs.

Assurez-vous que l’utilisateur vagrant dans la VM possède les droits d’écriture sur le chemin de destination.

Aussi, il faut connaître les limites et particularités de la commande, qui peut parfois légèrement différer de la commande scp classique : 

vagrant-scp ne gère pas les wildcards (*). Pour copier plusieurs fichiers, utilisez une boucle bash ou tar, comme nous l’avons vu ;

Aucune barre de progression n’est affichée pendant le transfert, l’affichage se fait à la fin du transfert ;

Les fichiers avec des espaces dans leur nom doivent être entourés de guillemets pour éviter d’altérer la commande.

Je vous présente ici quelques erreurs courantes que vous pourrez rencontrer, ainsi que les solutions probables :

ProblèmeSolutionCommand not found: vagrant-scpVérifiez l’installation, sur l’hôte, du plugin avec vagrant plugin list.machine with the name ‘[…]’ was not found configuredUtilisez vagrant status pour lister les VMs disponibles.Permission deniedVérifiez les droits sur le fichier ou le chemin dans la VM avec ls -l.No such file or directoryVérifiez que le chemin source existe (sur l’hôte ou la VM).The provider for this Vagrant-managed machine is reporting that itis not yet ready for SSH.Assurez-vous que la VM est démarrée avec vagrant up.

Passons à présent à une seconde méthode classique pour transférer des fichiers de l’hôte vers une VM gérée par vagrant.

Utiliser les dossiers partagés (synced_folders)

Les dossiers partagés permettent de synchroniser automatiquement un dossier entre votre machine hôte et la VM. Toute modification dans l’un est répercutée dans l’autre, c’est ce qui est habituellement utilisé avec une machine virtuelle “classique”.

Configuration dans le Vagrantfile

Pour activer un dossier partagé, nous allons modifier notre Vagrantfile avant de lancer la VM pour y ajouter la ligne suivante :

config.vm.synced_folder “”, “”

Dans mon exemple, ./dossier_local est le relatif ou absolu du dossier sur mon hôte et /dossier_vm est le chemin de ce même dossier (synchronisé) dans la VM. Exemple de fichier complet :

Vagrant.configure(“2”) do |config|
  config.vm.define “debian1” do |debian1|
    debian1.vm.box = “debian/bookworm64”
    debian1.vm.hostname = “debian1”
    debian1.vm.network “private_network”, ip: “192.168.56.101”

# Configuration du dossier partagé
    debian1.vm.synced_folder “~/Documents/vagrant_share”, “/mnt/vagrant_share”
    
debian1.vm.provider “virtualbox” do |vb|
      vb.memory = “1024”
      vb.cpus = 1
    end
  end
end

Utilisation des dossiers partagés

Après avoir modifié le Vagrantfile, démarrez ou rechargez la VM pour appliquer les changements :

# Déployer l’environnement ou démarrer un environnement existant
vagrant up

# Recharger un environnement actif pour appliquer la modification
vagrant reload

Dans tous les cas, vous devriez voir dans les logs affichés dans le terminal une ligne telle que celle-ci : 

==> debian1: Mounting shared folders…
    debian1: /home/mickael/Documents/vagrant_share => /mnt/vargant_share

Ces deux dossiers sont à présent synchronisés, vous pourrez les utiliser comme un dossier d’échange de fichiers entre l’hôte et la machine virtuelle, ou même entre plusieurs machines virtuelles !

Transfert de fichier vie un répertoire partagé vagrant.

Il faut savoir que par défaut, Vagrant synchronise déjà le répertoire du Vagrantfile vers /vagrant dans la VM. Si vous n’en avez pas besoin, vous pouvez ajouter cette configuration dans votre Vagrantfile :

config.vm.synced_folder “.”, “/vagrant”, disabled: true

Vagrant supporte plusieurs mécanismes de synchronisation de fichiers. Le choix dépend de votre OS hôte et de vos besoins en performance. Les utilisateurs avancés peuvent opter pour des méthodes autres que les VirtualBox Shared Folders (par défaut), comme NFS, Rsync ou SMB.

Quelle méthode choisir ?

Nous venons de voir deux méthodes différentes pour effectuer un échange de fichiers entre une VM gérée via Vagrant et son hôte. Voici un petit récapitulatif de ces deux méthodes, ainsi que leurs avantages et limites : 

Critèrevagrant-scpDossiers partagés (synced_folders)Type de transfertPonctuel (manuel)Continu (automatique)Facilité d’utilisationSimple pour les fichiers individuelsIdéal pour les dossiers et fichiers fréquentsPerformancesRapide pour les petits fichiersPeut-être lent pour les gros dossiers ou nombreux fichiers (surtout sous VirtualBox)SynchronisationUnidirectionnelle (selon la commande)Bidirectionnelle (selon la configuration)ConfigurationAucune (plugin à installer)Requiert une modification du VagrantCas d’usageTransferts occasionnelsDéveloppement, tests, configurations

En bref, vous pouvez utiliser vagrant-scp si vous avez besoin de transférer un ou quelques fichiers ponctuellement ou que vous préférez une solution simple et directe en ligne de commande ou si vous ne souhaitez pas modifier votre Vagrantfile.

Par contre, vous pouvez utiliser les dossiers partagés si vous travaillez avec des fichiers fréquemment modifiés (ex : code source, logs) et que vous voulez une synchronisation automatique sans intervention manuelle entre l’hôte et la VM ou même entre plusieurs VM.

Conclusion

Les deux méthodes présentées dans ce tutoriel offrent des solutions complémentaires pour transférer des fichiers entre votre machine hôte et une VM Vagrant.

vagrant-scp pour des transferts ponctuels et simples via la ligne de commande.

Les dossiers partagés pour une synchronisation automatique et transparente, surtout dans un contexte de développement ou de tests.

En fonction de vos besoins, vous pouvez choisir l’une ou l’autre méthode, ou même les combiner pour tirer parti de leurs avantages respectifs.

Co-fondateur d’IT-Connect.fr.
Auditeur/Pentester chez Orange Cyberdéfense.



Source link

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *