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" /