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?
/vagrant
como 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
/tmp
Como 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: false
y luegovagrant reload
centos/7
cuadro 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/config
defecto, lo cual hice en mi entorno:StrictHostKeyChecking no
rsync
a trabajar en este caso en comparación conscp
la 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
install
por 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.Vagrantfile
junto a sus otros proveedores. Necesitará reemplazarpath_within_repo
yremote_file
con 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/Copy
el archivo o archivos que desea copiar y luego/Where/To/Put/File
es la ubicación en la VM en la que desea copiar los archivos.Si crea este archivo y lo llama,
copyToServer.sh
puede ejecutar elsh
comando para enviar esos archivos.Como nota final, no puede ejecutar este código
provisioner
porque se ejecuta en el servidor Invitado, mientras que este código se ejecuta desde el Host.fuente
vagrant ssh-config
y 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.txt
No 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-config
comando.fuente
vagrant ssh-config
te 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
Vagrantfile
Entonces, edite su
Vagrantfile
y 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
Vagrantfile
A continuación, abra Git Bash ycd
al directorio donde tiene suVagrantfile
y 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-scp
etc.) Tenga en cuenta que el nombredefault
debe usarse tal cual, yavagrant ssh-config
que 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