remove commands vagrant

commands - ¿La forma más sencilla de copiar un solo archivo del host a un invitado Vagrant?



vagrant ssh config (16)

Tengo un caso de uso en el que ocasionalmente quiero copiar un solo archivo de mi máquina host al huésped Vagrant.

No quiero hacerlo a través de los aprovisionadores tradicionales (Puppet / Chef) porque a menudo es algo único: solo quiero agregar algo rápido a mi Vagrantfile.

No quiero compartir un directorio completo, posiblemente porque quiero sobrescribir un archivo existente sin dañar un directorio completo en el invitado.

También parece un poco excesivo escribir un script de aprovisionamiento de shell y lidiar con posibles escapes, cuando lo único que quiero hacer es copiar un archivo.

Entonces, ¿cuál es la forma más fácil de copiar un solo archivo de host a invitado?


Aquí está mi enfoque al problema:

Paso 1 - Encuentra la clave privada, el puerto ssh y la IP:

root@vivi:/opt/boxes/jessie# vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /root/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL

Paso 2: transfiera el archivo utilizando el puerto y la clave privada como parámetros para scp:

scp -P 2222 -i /root/.vagrant.d/insecure_private_key / someFileName.txt [email protected]:~

Espero que ayude,


Como pides la forma más fácil, sugiero usar vagrant-scp . Agrega un comando scp a vagrant, para que pueda copiar archivos a su máquina virtual como lo haría normalmente con scp.

Instalar a través de:

vagrant plugin install vagrant-scp

Úsalo así:

vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>


De forma predeterminada, la primera instancia errante usa el puerto ssh como 2222, y su dirección IP es 127.0.0.1 (Es posible que necesite ajustar el puerto con un host virtual real)

==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1)

Por lo tanto, puede ejecutar el siguiente comando para copiar su archivo local a una instancia errante. contraseña es la misma que el nombre de usuario que es vagrant .

scp -P 2222 your_file [email protected]:.

También puede copiar el archivo a su servidor local.

scp -P 2222 [email protected]:/PATH/filename .


En lugar de usar un aprovisionador de shell para copiar el archivo, también puede usar un aprovisionador de archivos Vagrant.

Nombre del aprovisionador: "file"

El aprovisionador de archivos le permite cargar un archivo desde la máquina host a la máquina invitada.

Vagrant.configure("2") do |config| # ... other configuration config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig" end


En realidad, hay una solución mucho más simple. Consulte https://gist.github.com/colindean/5213685/#comment-882885 :

"tenga en cuenta que, a menos que desee específicamente scp por alguna razón, la forma más sencilla de transferir archivos del host a la máquina virtual es colocarlos en el mismo directorio que Vagrantfile; ese directorio se monta automáticamente en / vagrant en la máquina virtual, por lo que Puedes copiarlos o usarlos directamente desde la máquina virtual ".


Intenta esto ... vagrant ubuntu 14.04 Esto funcionó para mí.

scp -r -P 2222 vagrant@localhost:/home .


La mejor manera de copiar el archivo de local a vagrant, no es necesario escribir ningún código o cualquier cosa o cualquier cambio de configuración. 1- Primero el vagrant ( vagrant up ) 2- abre cygwin 3- cygwin: ve a tu carpeta donde está vagrantfile o desde donde ejecutas el vagrant 4- ssh vagrant 5- ahora funcionará como un sistema normal.


Lo que terminé haciendo fue mantener el archivo dentro de mi directorio vagrant (montado automáticamente como / vagrant /) y copiarlo nuevamente con un aprovisionador de shell:

command = "cp #{File.join(''/vagrant/'', path_within_repo)} #{remote_file}" config.vm.provision :shell, :inline => command


Puedes agregar una entrada en ~/.ssh/config :

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

y el simple scp file vagrant:/path/ . Puede encontrar la ruta al archivo de identidad usando el comando vagrant ssh-config .


Si alguien quiere transferir un archivo de Windows Host a Vagrant, esta solución funcionó para mí.

1. Make sure to install **winscp** on your windows system 2. run **vagrant up** command 3. run **vagrant ssh-config** command and note down below details 4. Enter Hostname, Port, Username: vagrant, Password: vagrant in winscp and select **SCP**, file protocol 5. In most cases, hostname: 127.0.0.1, port: 2222, username: vagrant, password: vagrant.

Debería poder ver los directorios en su máquina errante.


Si por alguna razón no tienes permiso para usar

vagrant plugin install vagrant-scp

Hay una forma alternativa:

En primer lugar , borre suVagrantProject , luego escriba en el terminal:

vagrant ssh-config

Tendrá información sobre "Nombre de host" y "Puerto" de su máquina virtual.

En algunos casos, podría tener algunas máquinas virtuales en su proyecto. Así que solo encuentre su máquina maestra (en general, esta máquina virtual tiene el puerto 2222), y no preste atención a la información de otras máquinas.

escribe el comando para hacer la copia:

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

En esta pendiente tendrá que poner una contraseña vaga: por defecto es "errante"

después de eso, si miras los archivos en tu máquina virtual:

vagrant ssh xxVirtualMachineNamexx pwd ls

tendrá el "file.txt" en el directorio de su máquina virtual


Si se le impide tener los archivos en su directorio, puede ejecutar este código en un archivo de secuencia de comandos desde la máquina Host.

#!/bin/sh OPTIONS=`vagrant ssh-config | awk -v ORS='' '' ''{print "-o " $1 "=" $2}''` scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File

En esta configuración, solo necesita cambiar /File/To/Copy al archivo o los archivos que desea copiar y luego /Where/To/Put/File es la ubicación de la máquina virtual donde desea copiar los archivos.

Si crea este archivo y lo llama copyToServer.sh , puede ejecutar el comando sh para enviar esos archivos.

sh ./copyToServer.sh

Como nota final, no puede ejecutar este código como provisioner porque se ejecuta en el servidor Invitado, mientras que este código se ejecuta desde el Host.


Una forma alternativa de hacer esto sin instalar nada ( vagrant-scp etc.) Tenga en cuenta que el nombre default debe usarse tal como está, ya que vagrant ssh-config emite.

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 función no sería necesaria si scp -F =(vagrant ssh-config) ... hubiera funcionado entre shells. Pero como Bash no lo admite, tenemos que recurrir a esta solución.


Vagrant proporciona una forma de ejecutar un comando a través de ssh en lugar de iniciar sesión, por lo que para Linux host y guest puede usar:

  • de anfitrión a invitado:

cat ~/file_on_host.txt | vagrant ssh -c ''cat - > ~/file_on_guest.txt''

  • de invitado a anfitrión:

vagrant ssh -c ''cat ~/file_on_guest.txt'' > ~/file_on_host.txt

No hay necesidad de complementos o recargas de invitados. Solo asegúrate de proporcionar el ID de caja errante a ''vagrant ssh'' si no estás en el mismo directorio que Vagrantfile. Probado en Vagrant v1.8.1.


Ve al directorio donde tienes tu Vagrantfile
Luego, edita tu Vagrantfile y agrega lo siguiente:

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

"." significa el directorio en el que se encuentra actualmente en su máquina host
"/ vagrant" se refiere a "/ home / vagrant" en la máquina invitada (máquina Vagrant).

Copie los archivos que necesita enviar a la máquina invitada a la carpeta donde tiene su Vagrantfile Luego abra Git Bash y cd al directorio donde tiene su Vagrantfile y escriba:

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

donde XXXXXXX es tu nombre de vm . Usted puede obtener su nombre de VM ejecutando

vagrant global-status


vagrant scp plugin funciona si conoces el nombre de tu caja errante. compruebe vagrant global-status que proporcionará el nombre de su buzón y luego puede ejecutar:

vagrant global-status

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

vagrant scp ~ / foobar "nombre en mi caso por defecto": / home / "usuario" /