webentwicklung-frage-antwort-db.com.de

Der einfachste Weg, um eine einzelne Datei vom Host zum Vagrant-Gast zu kopieren?

Ich habe einen Anwendungsfall, bei dem ich gelegentlich eine einzelne Datei von meinem Host-Computer auf den Vagrant-Gast kopieren möchte.

Ich möchte dies nicht über traditionelle Provisioner (Puppet/Chef) tun, da dies oft ein Einzelstück ist.

Ich möchte nicht ein gesamtes Verzeichnis freigeben, möglicherweise weil ich eine vorhandene Datei überschreiben möchte, ohne ein vollständiges Verzeichnis auf dem Gast festzulegen.

Es scheint auch ein wenig übertrieben zu sein, ein Shell-Bereitstellungsskript zu schreiben und mögliche Fluchtwege zu behandeln, wenn ich nur eine Datei kopieren möchte.

Was ist der einfachste Weg, um eine einzelne Datei vom Host zum Gast zu kopieren?

206
LeeXGreen

Anstelle eines Shell Provisioners zum Kopieren der Datei können Sie auch einen Vagrant File Provisioner verwenden.

Name des Provisioners:"file"

Mit dem File Provisioner können Sie eine Datei vom Host-Computer auf den Gastcomputer hochladen.

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
85
lynnaloo

Da Sie nach dem einfachsten Weg fragen, schlage ich vor, vagrant-scp zu verwenden. Es fügt vagrant einen scp-Befehl hinzu, sodass Sie Dateien auf Ihre VM kopieren können, wie Sie es normalerweise mit scp tun würden.

Installieren über:

vagrant plugin install vagrant-scp

Verwenden Sie es wie folgt:

vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>
213
Luca Invernizzi

Es gibt tatsächlich eine viel einfachere Lösung. Siehe https://Gist.github.com/colindean/5213685/#comment-882885 :

msgstr "Bitte beachten Sie, dass der einfachste Weg, Dateien vom Host auf den VM zu übertragen, darin besteht, sie einfach in das gleiche Verzeichnis wie das Vagrantfile zu legen, sofern Sie SCP nicht aus irgendeinem Grund speziell möchten in der VM, damit Sie sie direkt von der VM kopieren oder verwenden können. "

131
Eric P

Standardmäßig verwendet die erste Vagrant-Instanz den SSH-Port als 2222 und die IP-Adresse ist 127.0.0.1.

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

Sie können also den folgenden Befehl ausführen, um Ihre lokale Datei in die Vagabund-Instanz zu kopieren. Passwort ist das gleiche wie Benutzername, also vagrant.

scp -P 2222 your_file [email protected]:.

Sie können die Datei auch auf Ihren lokalen Host kopieren.

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

Hier ist meine Herangehensweise an das Problem:

Schritt 1 - Finden Sie den privaten Schlüssel, den SSH-Port und die IP-Adresse:

[email protected]:/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

Schritt 2 - Datei mit dem Port und dem privaten Schlüssel als Parameter für scp übertragen:

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

Ich hoffe, es hilft,

49
alfredocambera

Am Ende habe ich die Datei in meinem Vagrant-Verzeichnis gelassen (automatisch als/vagrant/angehängt) und mit einem Shell-Provisioner kopiert:

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

Wenn Sie die Dateien nicht in Ihrem Verzeichnis haben, können Sie diesen Code in einer Skriptdatei auf dem Host-Computer ausführen.

#!/bin/sh
OPTIONS=`vagrant ssh-config | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`

scp ${OPTIONS} /File/To/Copy [email protected]:/Where/To/Put/File

In diesem Setup müssen Sie nur /File/To/Copy in die Datei oder die Dateien ändern, die Sie kopieren möchten. Dann ist /Where/To/Put/File der Speicherort auf der VM, in den die Dateien kopiert werden sollen.

Wenn Sie diese Datei erstellen und copyToServer.sh aufrufen, können Sie den Befehl sh ausführen, um diese Dateien zu pushen.

sh ./copyToServer.sh

Als letzte Anmerkung können Sie diesen Code nicht als provisioner ausführen, da dieser auf dem Gast-Server ausgeführt wird, während dieser Code vom Host aus ausgeführt wird.

18
geedew

Vagrant bietet die Möglichkeit, einen Befehl über ssh auszuführen, anstatt sich anzumelden. Für Linux Host und Gast können Sie Folgendes verwenden:

  • vom Gastgeber zum Gast:

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

  • vom Gast zum Gastgeber:

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

Keine Notwendigkeit für Plugins oder Gäste-Reloads. Stellen Sie einfach sicher, dass Sie 'Vagrant ssh' eine Vagrant-Box-ID angeben, wenn Sie sich nicht im selben Verzeichnis wie die Vagrantfile befinden. Getestet auf Vagrant v1.8.1.

9
user7962684

Sie können einen Eintrag in ~/.ssh/config hinzufügen:

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

und der simplescp file vagrant:/path/. Den Pfad zur Identitätsdatei finden Sie mit dem Befehl vagrant ssh-config.

9
chf

wenn Sie aus bestimmten Gründen nicht berechtigt sind, diese zu verwenden 

vagrant plugin install vagrant-scp

es gibt einen alternativen Weg:

Zuerst vagrant up yourVagrantProject , dann schreibe in das Terminal:

vagrant ssh-config

sie erhalten Informationen zu "HostName" und "Port" Ihrer virtuellen Maschine. 

In einigen Fällen können virtuelle Maschinen in Ihrem Projekt vorhanden sein. Finden Sie also einfach Ihren Master-Computer (im Allgemeinen VM hat den Port 2222) - und beachten Sie nicht die Informationen anderer Computer.

schreiben Sie den Befehl, um die Kopie zu erstellen:

scp -P xxPortxx  /Users/where/is/your/file.txt  [email protected]:/home/vagrant

An diesem Steilhang müssen Sie ein vagrant-Passwort eingeben: Standardmäßig ist es "vagrant"

danach, wenn Sie Dateien in Ihrer virtuellen Maschine betrachten: 

vagrant ssh xxVirtualMachineNamexx
pwd
ls

sie haben die "file.txt" in Ihrem virtuellen Maschinenverzeichnis

6
slideWXY
vagrant upload localfile

dadurch wird localfile im Heimatverzeichnis des Vagabunden-Benutzers gespeichert 

https://www.vagrantup.com/docs/cli/upload.html

5
jouell

Gehen Sie in das Verzeichnis, in dem Sie Ihre Vagrantfile haben.
.__ Bearbeiten Sie dann Ihre Vagrantfile und fügen Sie Folgendes hinzu:

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

"." bezeichnet das Verzeichnis, in dem Sie sich aktuell auf Ihrem Host-Rechner befinden
"/ vagrant" bezieht sich auf "/ home/vagrant" auf dem guest-Rechner (Vagrant-Rechner).

Kopieren Sie die Dateien, die Sie an den Gastcomputer senden müssen, in den Ordner, in dem sich Ihre Vagrantfile.__ befindet. Öffnen Sie dann Git Bash und cd in das Verzeichnis, in dem sich Ihre Vagrantfile befindet, und geben Sie Folgendes ein

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

dabei ist XXXXXXX Ihr vm-Name. Sie können Ihren Vm-Namen erhalten, indem Sie ausführen 

vagrant global-status
5
akshaynagpal

vagrant scp plugin funktioniert, wenn Sie den Namen Ihrer Vagrant-Box kennen. Prüfen Sie den globalen Status von Vagrant.

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

vagrant scp ~/foobar "name in meinem fall default":/home/"user" /

4
Bálint Szigeti

Wenn jemand eine Datei von Windows Host auf Vagrant übertragen möchte, hat diese Lösung für mich funktioniert.

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.

Sie sollten Verzeichnisse in Ihrem Vagrant-Rechner sehen können.

1
Lufy

Versuchen Sie dies .. vagrant ubuntu 14.04.

scp -r -P 2222 [email protected]:/home .
0
Caliari

Eine alternative Möglichkeit, dies zu tun, ohne etwas zu installieren (vagrant-scp usw.). Beachten Sie, dass der Name default so verwendet werden muss, da vagrant ssh-config dies ausgibt.

vg_scp() {
  tmpfile=$(mktemp /tmp/vagrant-ssh-config.XXXX)
  vagrant ssh-config > $tmpfile
  scp -F $tmpfile "[email protected]"
  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

Die Funktion wäre nicht notwendig, wenn scp -F =(vagrant ssh-config) ... shells übergreifend funktioniert hätte. Da dies von Bash jedoch nicht unterstützt wird, müssen wir auf diesen Workaround zurückgreifen.

0
Gurjeet Singh

Dies kann eine Verbesserung für gute Antworten sein

1) Ja, installiere vagrant-scp

 vagrant plugin install vagrant-scp

2) [vm_name] ist optional

vagrant scp thisFileExamle.txt :/this/dirVagrant/dir/

3) keine Notwendigkeit für -r im Falle von dir

vagrant scp thisDir :/this/dirVagrant/dir/

4) es funktioniert andersherum zum Herunterladen von Dateien von Vagrant

vagrant scp :/somefile.txt  thisLocalDir 
0
mebada