314 votes

Quelle est la méthode la plus simple pour copier un fichier unique de l'hôte vers l'invité Vagrant ?

J'ai un cas d'utilisation où je veux occasionnellement copier un seul fichier de ma machine hôte vers l'invité Vagrant.

Je ne veux pas le faire via les provisionneurs traditionnels (Puppet / Chef) parce que c'est souvent un cas unique -- je veux juste quelque chose de rapide à ajouter à mon fichier Vagrant.

Je ne veux pas partager un répertoire entier, peut-être parce que je veux écraser un fichier existant sans détruire un répertoire entier sur l'invité.

Il semble également un peu exagéré d'écrire un script script de provisionnement du shell, et de gérer l'échappement potentiel, alors que tout ce que je veux faire, c'est copier un fichier.

Quel est donc le moyen le plus simple de copier un fichier unique de l'hôte vers l'invité ?

9voto

chf Points 21

Vous pouvez ajouter une entrée dans ~/.ssh/config :

Host vagrant
    User vagrant
    HostName localhost
    Port 2222
    IdentityFile /home/user_name/.vagrant.d/insecure_private_key

et le simple scp file vagrant:/path/ . Vous pouvez trouver le chemin d'accès au fichier d'identité à l'aide de la fonction vagrant ssh-config commande.

8voto

akshaynagpal Points 1313

Allez dans le répertoire où se trouve votre Vagrantfile
Ensuite, modifiez votre Vagrantfile et ajouter ce qui suit :

config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']

"." désigne le répertoire dans lequel vous vous trouvez actuellement sur votre machine hôte
"/vagrant" renvoie à "/home/vagrant" sur l'ordinateur central. machine invitée (machine Vagrant).

Copiez les fichiers que vous devez envoyer à la machine invitée dans le dossier où vous avez placé votre Vagrantfile Ensuite, ouvrez Git Bash y cd dans le répertoire où se trouve votre Vagrantfile et le type :

vagrant scp config.json XXXXXXX:/home/vagrant/

où XXXXXXX est votre nom du vm . Vous pouvez obtenir le nom de votre vm en exécutant

vagrant global-status

8voto

slideWXY Points 119

Si, pour une raison quelconque, vous n'avez pas l'autorisation d'utiliser

vagrant plugin install vagrant-scp

il existe une autre solution :

Premier vagabond en place votreProjetVagrant , puis écrire dans le terminal :

vagrant ssh-config

vous obtiendrez des informations sur le "Nom d'hôte" et le "Port" de votre machine virtuelle.

Dans certains cas, vous pouvez avoir quelques machines virtuelles dans votre projet. Il suffit donc de trouver la machine maître (en général, cette VM a le port 2222), et de ne pas prêter attention aux informations des autres machines.

écrire la commande pour faire la copie :

scp -P xxPortxx  /Users/where/is/your/file.txt  vagrant@xxHostNamexx:/home/vagrant

A ce stade, vous devrez mettre un mot de passe vagrant : par défaut c'est "vagrant"

après cela, si vous regardez les fichiers dans votre machine virtuelle :

vagrant ssh xxVirtualMachineNamexx
pwd
ls

vous aurez le fichier "file.txt" dans le répertoire de votre machine virtuelle

5voto

Bálint Szigeti Points 161

Le plugin vagrant scp fonctionne si vous connaissez le nom de votre boîte vagrant. Vérifiez l'état global de vagrant qui vous fournira le nom de votre boîte et vous pourrez alors l'utiliser :

vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
13e680d  **default** virtualbox running /home/user

vagrant scp ~/foobar "nom dans mon cas default":/home/"user"/

2voto

Gurjeet Singh Points 349

Une autre façon de procéder sans installer quoi que ce soit ( vagrant-scp etc.) Notez que le nom default doit être utilisé tel quel, puisque vagrant ssh-config émet cela.

vg_scp() {
  tmpfile=$(mktemp /tmp/vagrant-ssh-config.XXXX)
  vagrant ssh-config > $tmpfile
  scp -F $tmpfile "$@"
  rm $tmpfile
}

# Copy from local to remote
vg_scp somefile default:/tmp

# Copy from remote to local
vg_scp default:/tmp/somefile ./

# Copy a directory from remote to local
vg_scp -r default:/tmp ./tmp

La fonction ne serait pas nécessaire si scp -F =(vagrant ssh-config) ... aurait fonctionné pour toutes les coquilles. Mais comme cela n'est pas supporté par Bash, nous devons recourir à cette solution de contournement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X