J'ai un cas d'utilisation où je souhaite parfois copier un seul fichier de ma machine hôte vers l'invité Vagrant.
Je ne veux pas le faire via des provisionneurs traditionnels (Puppet / Chef) car il s'agit souvent d'une opération ponctuelle - je veux juste quelque chose de rapide à ajouter à mon Vagrantfile.
Je ne veux pas partager un répertoire entier, peut-être parce que je veux écraser un fichier existant sans nuquer un répertoire entier sur l'invité.
Il semble également un peu exagéré d'écrire un script de provisionnement de shell et de gérer les échappements potentiels, lorsque tout ce que je veux faire est de copier un fichier.
Alors, quelle est la façon la plus simple de copier un seul fichier de l'hôte vers l'invité?
/vagrant
comme mentionné ici peut également être une bonne optionvagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Réponses:
Au lieu d'utiliser un provisionneur shell pour copier le fichier, vous pouvez également utiliser un provisionneur de fichiers Vagrant .
la source
/tmp
Puisque vous demandez le moyen le plus simple, je suggère d'utiliser vagrant-scp . Il ajoute une commande scp à vagrant, vous pouvez donc copier des fichiers sur votre machine virtuelle comme vous le feriez normalement avec scp.
Installer via:
Utilisez-le comme ceci:
la source
vagrant plugin
."vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
J'essaie de copier des fichiers dans le répertoire racine nginx. Il dit,The machine with the name 'C' was not found configured for this Vagrant environment.
le répertoire et tout va bien.Il existe en fait une solution beaucoup plus simple. Voir https://gist.github.com/colindean/5213685/#comment-882885 :
la source
config.vm.synced_folder ".", "/vagrant", disabled: false
et ensuitevagrant reload
centos/7
boîte vagabonde si vous essayez de faire l'opération inverse (boîte vagabonde vers la machine locale).Par défaut, la première instance vagabonde utilise le port ssh comme 2222, et son adresse IP est 127.0.0.1 (Vous devrez peut-être ajuster le port avec l'hôte virtuel réel)
Vous pouvez donc exécuter la commande ci-dessous pour copier votre fichier local vers l'instance vagabonde. le mot de passe est le même que le nom d'utilisateur
vagrant
.Vous pouvez également copier le fichier sur votre hôte local.
la source
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp
~/.ssh/config
par défaut, ce que j'ai fait dans mon environnement:StrictHostKeyChecking no
rsync
au travail dans ce cas par rapport àscp
, étant donné la description de rsync comme "un remplacement plus rapide et flexible de rcp".Voici mon approche du problème:
Étape 1 - Trouvez la clé privée, le port ssh et l'IP:
Étape 2 - Transférez le fichier en utilisant le port et la clé privée comme paramètres pour scp:
J'espère que ça aide,
la source
Ce que j'ai fini par faire était de garder le fichier dans mon répertoire vagrant (monté automatiquement sous / vagrant /) et de le copier avec un provisionneur shell:
la source
install
par exempleinstall -D -m644 -C ...
src dest. au lieu de cp, car vous pouvez faire des choses comme spécifier les autorisations, la propriété, créer automatiquement des répertoires de tête, ne faire la copie que si le fichier doit être mis à jour, etc ... au lieu de cp, qui est simple et bien si c'est tout ce que vous besoin de faire.Vagrantfile
aux côtés de vos autres provisionneurs. Vous devrez remplacerpath_within_repo
etremote_file
par des choses qui ont du sens, pour votre application, bien sûr :)qui mettra localfile dans le répertoire personnel de l'utilisateur vagabond
https://www.vagrantup.com/docs/cli/upload.html
la source
Si vous n'êtes pas autorisé à avoir les fichiers dans votre répertoire, vous pouvez exécuter ce code dans un fichier de script à partir de la machine hôte.
Dans cette configuration, il vous suffit de modifier
/File/To/Copy
le ou les fichiers que vous souhaitez copier, puis/Where/To/Put/File
l'emplacement de la machine virtuelle sur laquelle vous souhaitez copier les fichiers.Si vous créez ce fichier et l'appelez,
copyToServer.sh
vous pouvez alors exécuter lash
commande pour envoyer ces fichiers.Enfin, vous ne pouvez pas exécuter ce code en tant que
provisioner
car il s'exécute sur le serveur invité, tandis que ce code s'exécute à partir de l'hôte.la source
vagrant ssh-config
et la coller dans leur fichier ~ / .ssh / config, pour rendre cela encore plus facile à l'avenir. C'est-à-dire en combinant cela avec la réponse deOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
omettre d'utiliser cette première ligne de sortie ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
comme indiquéVagrant fournit un moyen d'exécuter une commande sur ssh au lieu de se connecter, donc pour l'hôte et l'invité Linux, vous pouvez utiliser:
cat ~/file_on_host.txt | vagrant ssh -c 'cat - > ~/file_on_guest.txt'
vagrant ssh -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txt
Pas besoin de plugins ou de rechargements d'invités. Assurez-vous simplement de fournir l'ID de la boîte vagabonde à 'vagrant ssh' si vous n'êtes pas dans le même répertoire que le Vagrantfile. Testé sur Vagrant v1.8.1.
la source
Vous pouvez ajouter une entrée dans
~/.ssh/config
:et le simple
scp file vagrant:/path/
. Vous pouvez trouver le chemin d'accès au fichier d'identité à l'aide de lavagrant ssh-config
commande.la source
vagrant ssh-config
vous donne une configuration encore plus complète et pratique que vous pouvez mettre dans votre ~ / .ssh / config. Mais merci encore!Allez dans le répertoire où vous avez votre
Vagrantfile
Then, éditez votre
Vagrantfile
et ajoutez ce qui suit:"." signifie que le répertoire dans lequel vous vous trouvez actuellement sur votre machine hôte
"/ vagrant" fait référence à "/ home / vagrant" sur la machine invitée (machine Vagrant).
Copiez les fichiers que vous devez envoyer à la machine invitée dans le dossier où vous avez votre
Vagrantfile
Ensuite ouvrez Git Bash etcd
dans le répertoire où vous avez votreVagrantfile
et tapez:où XXXXXXX est votre nom vm . Vous pouvez obtenir votre nom vm en exécutant
la source
si pour certaines raisons vous n'êtes pas autorisé à utiliser
il existe une alternative:
Commencez par vagabonder votre projet vaginal , puis écrivez dans le terminal:
vous aurez des informations sur "HostName" et "Port" de votre machine virtuelle.
Dans certains cas, vous pourriez avoir des machines virtuelles dans votre projet. Il vous suffit donc de trouver votre machine maître (en général, cette VM a le port 2222), et ne faites pas attention aux informations des autres machines.
écrivez la commande pour faire la copie:
A ce stade, vous devrez mettre un mot de passe vagabond: par défaut c'est "vagabond"
après cela, si vous regardez les fichiers de votre machine virtuelle:
vous aurez le "fichier.txt" dans votre répertoire de machine virtuelle
la source
Le plugin vagrant scp fonctionne si vous connaissez le nom de votre boîte vagabonde. vérifiez vagrant global-status qui fournira le nom de votre boîte, puis vous pouvez exécuter:
la source
Essayez ceci .. vagrant ubuntu 14.04 Cela a fonctionné pour moi.
la source
Une autre façon de faire cela sans installer quoi que ce soit (
vagrant-scp
etc.) Notez que le nomdefault
doit être utilisé tel quel, car ilvagrant ssh-config
émet cela.La fonction ne serait pas nécessaire si
scp -F =(vagrant ssh-config) ...
elle avait fonctionné sur plusieurs coques. Mais comme cela n'est pas pris en charge par Bash, nous devons recourir à cette solution de contournement.la source
Si quelqu'un veut transférer un fichier de l'hôte Windows vers vagabond, cette solution a fonctionné pour moi.
Vous devriez pouvoir voir les répertoires de votre machine vagabonde.
la source
Meilleure façon de copier un fichier du local vers le vagabond, pas besoin d'écrire de code ou quoi que ce soit ou toute modification de configuration. 1- Tout d'abord le vagabond ( vagabond vers le haut ) 2- ouvrez cygwin 3- cygwin: allez dans votre dossier où se trouve vagrantfile ou d'où vous lancez le vagabond 4- ssh vagrant 5- maintenant cela fonctionnera comme un système normal.
la source