Ich habe einen Anwendungsfall, in 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 einmalig ist - ich möchte nur etwas schnelles zu meinem Vagrantfile hinzufügen.
Ich möchte nicht ein ganzes Verzeichnis freigeben, möglicherweise weil ich eine vorhandene Datei überschreiben möchte, ohne ein ganzes Verzeichnis auf dem Gast zu löschen.
Es scheint auch ein bisschen übertrieben zu sein, ein Shell-Bereitstellungsskript zu schreiben und sich mit potenziellem Escape zu befassen, wenn ich nur eine Datei kopieren möchte.
Was ist der einfachste Weg, um eine einzelne Datei vom Host zum Gast zu kopieren?
/vagrant
hier erwähnten Einhängepunkts auch eine gute Option sein kannvagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Antworten:
Anstatt einen Shell-Provisioner zum Kopieren der Datei zu verwenden, können Sie auch einen Vagrant- File-Provisioner verwenden .
quelle
/tmp
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.
Installation über:
Verwenden Sie es so:
quelle
vagrant plugin
."vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
ich habe versucht, Dateien in das Nginx-Stammverzeichnis zu kopieren. Es heißt:The machine with the name 'C' was not found configured for this Vagrant environment.
Das Verzeichnis und alles ist in Ordnung.Es gibt tatsächlich eine viel einfachere Lösung. Siehe https://gist.github.com/colindean/5213685/#comment-882885 :
quelle
config.vm.synced_folder ".", "/vagrant", disabled: false
und dannvagrant reload
centos/7
Vagabundbox, wenn versucht wird, den umgekehrten Vorgang auszuführen (Vagabundbox auf lokaler Maschine).Standardmäßig verwendet die erste vagabundierende Instanz den SSH-Port als 2222 und die IP-Adresse lautet 127.0.0.1 (Möglicherweise müssen Sie den Port mit dem realen virtuellen Host anpassen.)
Sie können also den folgenden Befehl ausführen, um Ihre lokale Datei in eine vagabundierende Instanz zu kopieren. Passwort ist das gleiche wie Benutzername
vagrant
.Sie können die Datei auch auf Ihren lokalen Host zurückkopieren.
quelle
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp
~/.ssh/config
als Standard hinzuzufügen , was ich in meiner Umgebung getan habe:StrictHostKeyChecking no
rsync
in diesem Fall zur Arbeit zu kommen , verglichen mitscp
der Beschreibung von rsync als "schnellerer, flexibler Ersatz für rcp".Hier ist meine Herangehensweise an das Problem:
Schritt 1 - Finden Sie den privaten Schlüssel, den SSH-Port und die IP:
Schritt 2 - Übertragen Sie die Datei mit dem Port und dem privaten Schlüssel als Parameter für scp:
Ich hoffe, es hilft,
quelle
Am Ende habe ich die Datei in meinem Vagrant-Verzeichnis (automatisch als / vagrant / bereitgestellt) aufbewahrt und mit einem Shell-Provisioner kopiert:
quelle
install
zinstall -D -m644 -C ...
. B. src dest. Anstelle von cp, da Sie beispielsweise die Berechtigungen und den Besitz angeben, automatisch führende Verzeichnisse erstellen, die Kopie nur ausführen können, wenn die Datei aktualisiert werden muss, usw. ... anstelle von cp, was einfach und in Ordnung ist, wenn Sie das alles sind tun müssen.Vagrantfile
neben Ihren anderen Provisionern in Ihre . Sie müssen ersetzenpath_within_repo
undremote_file
durch Dinge, die für Ihre Anwendung natürlich Sinn machen :)Dadurch wird localfile in das Home-Verzeichnis des vagabundierenden Benutzers gestellt
https://www.vagrantup.com/docs/cli/upload.html
quelle
Wenn Sie die Dateien nicht in Ihrem Verzeichnis haben, können Sie diesen Code in einer Skriptdatei auf dem Host-Computer ausführen.
In diesem Setup müssen Sie nur
/File/To/Copy
zu der Datei oder den Dateien wechseln , die Sie kopieren möchten. Dies/Where/To/Put/File
ist der Speicherort auf der VM, auf den die Dateien kopiert werden sollen.Wenn Sie diese Datei erstellen und aufrufen, können
copyToServer.sh
Sie densh
Befehl ausführen , um diese Dateien zu übertragen.Abschließend können Sie diesen Code nicht als ausführen,
provisioner
da dieser auf dem Gastserver ausgeführt wird, während dieser Code vom Host ausgeführt wird.quelle
vagrant ssh-config
Benutzer die Ausgabe einfach in ihre ~ / .ssh / config-Datei einfügen können, um dies in Zukunft noch einfacher zu machen. Dh dies mit der Antwort vonOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
die Verwendung dieser ersten Zeile der ssh-config-Ausgabe weglassen.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
wie hier dokumentiert verwenden: gist.github.com/geedew/11289350Vagrant bietet eine Möglichkeit, einen Befehl über ssh auszuführen, anstatt sich anzumelden. Für Linux-Host und -Gast können Sie also Folgendes verwenden:
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
Keine Notwendigkeit für Plugins oder Gast-Reloads. Stellen Sie einfach sicher, dass Sie 'vagrant ssh' eine Vagrant-Box-ID geben, wenn Sie sich nicht im selben Verzeichnis wie die Vagrant-Datei befinden. Getestet auf Vagrant v1.8.1.
quelle
Sie können einen Eintrag hinzufügen in
~/.ssh/config
:und das einfache
scp file vagrant:/path/
. Mit demvagrant ssh-config
Befehl können Sie den Pfad zur Identitätsdatei finden .quelle
vagrant ssh-config
die Ihnen eine noch vollständigere und bequemere Konfiguration bietet, die Sie in Ihre ~ / .ssh / config einfügen können. Aber nochmals vielen Dank!Gehen Sie zu dem Verzeichnis, in dem Sie Ihr
Vagrantfile
Dann haben, bearbeiten Sie Ihr
Vagrantfile
und fügen Sie Folgendes hinzu:"." bedeutet, dass sich das Verzeichnis, in dem Sie sich derzeit auf Ihrem Host-Computer befinden,
"/ vagrant" auf "/ home / vagrant" auf dem Gastcomputer (Vagrant-Computer) bezieht .
Kopieren Sie die Dateien , die Sie brauchen , um Gastcomputer in den Ordner zu senden , wo Sie Ihre haben
Vagrantfile
dann geöffnet Git Bash undcd
in das Verzeichnis , in dem Sie Ihre habenVagrantfile
und Typ:Dabei ist XXXXXXX Ihr VM-Name . Sie können Ihren VM-Namen erhalten, indem Sie ausführen
quelle
wenn Sie aus bestimmten Gründen keine Berechtigung zur Verwendung haben
Es gibt einen alternativen Weg:
Zuerst vagrantiere deinVagrantProject , dann schreibe in das Terminal:
Sie erhalten Informationen zu "Hostname" und "Port" Ihrer virtuellen Maschine.
In einigen Fällen könnten einige virtuelle Maschinen in Ihrem Projekt vorhanden sein. Suchen Sie also einfach Ihren Master-Computer (im Allgemeinen hat diese VM den Port 2222) und achten Sie nicht auf die Informationen anderer Computer.
Schreiben Sie den Befehl zum Erstellen der Kopie:
An dieser Stelle müssen Sie ein Vagabund-Passwort eingeben: Standardmäßig ist es "Vagabund".
danach, wenn Sie sich Dateien in Ihrer virtuellen Maschine ansehen:
Sie haben die "file.txt" in Ihrem Verzeichnis der virtuellen Maschine
quelle
Das Vagrant SCP Plugin funktioniert, wenn Sie den Namen Ihrer Vagrant Box kennen. Überprüfen Sie den globalen Vagabundstatus, der Ihren Boxnamen angibt, und führen Sie dann Folgendes aus:
quelle
Versuchen Sie dies .. vagrant ubuntu 14.04 Das hat bei mir funktioniert.
quelle
Eine alternative Möglichkeit, dies zu tun, ohne etwas zu installieren (
vagrant-scp
usw.) Beachten Sie, dass der Namedefault
unverändert verwendet werden muss, da diesvagrant ssh-config
ausgegeben wird.Die Funktion wäre nicht notwendig, wenn
scp -F =(vagrant ssh-config) ...
sie über Shells hinweg funktioniert hätte . Da dies jedoch von Bash nicht unterstützt wird, müssen wir auf diese Problemumgehung zurückgreifen.quelle
Wenn jemand Dateien vom Windows-Host auf Vagrant übertragen möchte, hat diese Lösung für mich funktioniert.
Sie sollten in der Lage sein, Verzeichnisse in Ihrer Vagabundmaschine zu sehen.
quelle
Der beste Weg, um eine Datei von lokal nach vagrant zu kopieren. Sie müssen keinen Code oder etwas schreiben oder Konfigurationsänderungen vornehmen. 1- Zuerst den Vagabund hoch ( Vagabund hoch ) 2- Cygwin öffnen 3- Cygwin: Gehen Sie zu Ihrem Ordner, in dem sich die Vagabunddatei befindet, oder von wo aus Sie den Vagabund 4- ssh-Vagabund starten. 5- Jetzt funktioniert es wie ein normales System.
quelle