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 aprovisionadores tradicionales (Puppet / Chef) porque esto es a menudo único; solo quiero algo rápido para agregar a mi Vagrantfile.
No quiero compartir un directorio completo, posiblemente porque quiero sobrescribir un archivo existente sin destruir un directorio completo en el invitado.
También parece un poco exagerado escribir un script de aprovisionamiento de shell y lidiar con posibles escapes, cuando todo lo que quiero hacer es copiar un archivo.
Entonces, ¿cuál es la forma más fácil de copiar un solo archivo del host al invitado?

/vagrantcomo se menciona aquí también puede ser una buena opciónvagrant upload /path/to/my/file...vagrant scp file.txt :~/.Respuestas:
En lugar de usar un aprovisionador de shell para copiar el archivo, también puede usar un aprovisionador de archivos Vagrant .
fuente
/tmpComo solicita la forma más fácil, le sugiero que use vagrant-scp . Agrega un comando scp a vagrant, para que pueda copiar archivos a su VM como lo haría normalmente con scp.
Instalar a través de:
Úselo así:
fuente
vagrant plugin".vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html, estoy tratando de copiar archivos en el directorio raíz de nginx. Dice:The machine with the name 'C' was not found configured for this Vagrant environment.El directorio y todo está bien.En realidad, hay una solución mucho más simple. Ver https://gist.github.com/colindean/5213685/#comment-882885 :
fuente
config.vm.synced_folder ".", "/vagrant", disabled: falsey luegovagrant reloadcentos/7cuadro vagabundo si intenta hacer la operación inversa (cuadro vagabundo a la máquina local).De manera predeterminada, la primera instancia vagabunda usa el puerto ssh como 2222, y su dirección IP es 127.0.0.1 (es posible que deba ajustar el puerto con un host virtual real)
Por lo tanto, puede ejecutar el siguiente comando para copiar su archivo local a una instancia vagabunda. la contraseña es lo mismo que el nombre de usuario que es
vagrant.También puede copiar el archivo a su host local.
fuente
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp~/.ssh/configdefecto, lo cual hice en mi entorno:StrictHostKeyChecking norsynca trabajar en este caso en comparación conscpla descripción de rsync como "un reemplazo más rápido y flexible para rcp".Aquí está mi enfoque del problema:
Paso 1 - Encuentra la clave privada, el puerto ssh y la IP:
Paso 2 - Transfiera el archivo usando el puerto y la clave privada como parámetros para scp:
Espero que ayude,
fuente
Lo que terminé haciendo fue mantener el archivo dentro de mi directorio vagabundo (montado automáticamente como / vagrant /) y copiarlo con un aprovisionador de shell:
fuente
installpor ejemplo,install -D -m644 -C ...src dest. en lugar de cp, porque puede hacer cosas como especificar los permisos, la propiedad, crear automáticamente los directorios principales, solo hacer la copia si el archivo necesita ser actualizado, etc ... en lugar de cp, que es simple y correcto si eso es todo necesito hacer.Vagrantfilejunto a sus otros proveedores. Necesitará reemplazarpath_within_repoyremote_filecon cosas que tengan sentido, para su aplicación, por supuesto :)eso colocará el archivo local en el directorio de inicio del usuario vagabundo
https://www.vagrantup.com/docs/cli/upload.html
fuente
Si no puede tener los archivos en su directorio, puede ejecutar este código en un archivo de script desde la máquina Host.
En esta configuración, solo necesita cambiar
/File/To/Copyel archivo o archivos que desea copiar y luego/Where/To/Put/Filees la ubicación en la VM en la que desea copiar los archivos.Si crea este archivo y lo llama,
copyToServer.shpuede ejecutar elshcomando para enviar esos archivos.Como nota final, no puede ejecutar este código
provisionerporque se ejecuta en el servidor Invitado, mientras que este código se ejecuta desde el Host.fuente
vagrant ssh-configy pegarla en su archivo ~ / .ssh / config, para hacer esto aún más fácil en el futuro. Es decir, combinar esto con la respuesta deOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`que omitir el uso de esa primera línea de salida ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`como se documenta aquí: gist.github.com/geedew/11289350Vagrant proporciona una forma de ejecutar un comando a través de ssh en lugar de iniciar sesión, por lo que para el host y el invitado de Linux puede usar:
cat ~/file_on_host.txt | vagrant ssh -c 'cat - > ~/file_on_guest.txt'vagrant ssh -c 'cat ~/file_on_guest.txt' > ~/file_on_host.txtNo hay necesidad de complementos o recargas de invitados. Solo asegúrese de proporcionar la ID de la caja vagabunda a 'vagrant ssh' si no está en el mismo directorio que el archivo Vagrantfile. Probado en Vagrant v1.8.1.
fuente
Puede agregar una entrada en
~/.ssh/config:Y lo simple
scp file vagrant:/path/. Puede encontrar la ruta al archivo de identidad con elvagrant ssh-configcomando.fuente
vagrant ssh-configte da una configuración aún más completa y conveniente recortada que puedes poner en tu ~ / .ssh / config. Pero gracias de nuevo!Vaya al directorio donde tiene su
VagrantfileEntonces, edite su
Vagrantfiley agregue lo siguiente:"." significa que 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
VagrantfileA continuación, abra Git Bash ycdal directorio donde tiene suVagrantfiley escriba:donde XXXXXXX es tu nombre vm . Puede obtener su nombre de VM ejecutando
fuente
si por alguna razón no tienes permiso para usar
hay una forma alternativa:
Primero vague su proyecto de vagabundo , luego escriba en el terminal:
tendrá información sobre "HostName" y "Port" 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 VM tiene el puerto 2222), y no preste atención a la información de otras máquinas.
escribe el comando para hacer la copia:
En este empinado tendrá que poner una contraseña vagabunda: por defecto es "vagabundo"
después de eso si mira los archivos en su máquina virtual:
tendrá el "archivo.txt" en el directorio de su máquina virtual
fuente
El complemento scp vagabundo funciona si conoce el nombre del cuadro vagabundo. verifique el estado global vagabundo que proporcionará el nombre de su casilla y luego puede ejecutar:
fuente
Pruebe esto ... ubuntu vauntu 14.04 Esto funcionó para mí.
fuente
Una forma alternativa de hacerlo sin instalar nada (
vagrant-scpetc.) Tenga en cuenta que el nombredefaultdebe usarse tal cual, yavagrant ssh-configque emite eso.La función no sería necesaria si
scp -F =(vagrant ssh-config) ...hubiera funcionado en shells. Pero como Bash no lo admite, tenemos que recurrir a esta solución.fuente
Si alguien quiere transferir el archivo del host de Windows al vagabundo, entonces esta solución me funcionó.
Debería poder ver directorios en su máquina vagabunda.
fuente
La mejor manera de copiar archivos de local a vagabundo, no es necesario escribir ningún código ni ninguna cosa ni ningún cambio de configuración. 1- Primero el vagabundo ( vagabundo arriba ) 2- abre cygwin 3- cygwin: ve a tu carpeta donde está vagrantfile o desde donde inicias el vagabundo 4- ssh vagrant 5- ahora funcionará como un sistema normal.
fuente