Mam przypadek użycia, w którym czasami chcę skopiować pojedynczy plik z komputera hosta do gościa Vagrant.
Nie chcę tego robić za pośrednictwem tradycyjnych dostawców (Puppet / Chef), ponieważ często jest to jednorazowe - chcę tylko coś szybko dodać do mojego Vagrantfile.
Nie chcę udostępniać całego katalogu, być może dlatego, że chcę zastąpić istniejący plik bez nukania całego katalogu na gościu.
Wydaje się również trochę przesadą napisanie skryptu obsługi powłoki i radzenie sobie z potencjalnym ucieczką, gdy wszystko, co chcę zrobić, to skopiować plik.
Jaki jest więc najłatwiejszy sposób na skopiowanie pojedynczego pliku z hosta na gościa?
/vagrant
jak wspomniano tutajvagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Odpowiedzi:
Zamiast używać dostawcy powłoki do kopiowania pliku, możesz również użyć narzędzia Vagrant do udostępniania plików .
źródło
/tmp
Ponieważ pytasz o najłatwiejszy sposób, sugeruję użycie vagrant-scp . Dodaje polecenie scp do włóczęgi, dzięki czemu można kopiować pliki na maszynę wirtualną, tak jak zwykle w przypadku scp.
Zainstaluj przez:
Używaj go w ten sposób:
źródło
vagrant plugin
”.vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
Próbuję skopiować pliki do katalogu głównego nginx. Mówi:The machine with the name 'C' was not found configured for this Vagrant environment.
katalog i wszystko jest w porządku.W rzeczywistości istnieje znacznie prostsze rozwiązanie. Zobacz https://gist.github.com/colindean/5213685/#comment-882885 :
źródło
config.vm.synced_folder ".", "/vagrant", disabled: false
i wtedyvagrant reload
centos/7
polu Vagrant jeśli staramy się robić operacji odwrotnej (włóczęga skrzynki na lokalnym komputerze).Domyślnie pierwsza błędna instancja używa portu ssh jako 2222, a jej adres IP to 127.0.0.1 (może być konieczne dostosowanie portu za pomocą prawdziwego wirtualnego hosta)
Możesz więc uruchomić poniższe polecenie, aby skopiować plik lokalny do błędnej instancji. hasło jest takie samo jak nazwa użytkownika
vagrant
.Możesz także skopiować plik z powrotem na lokalnego hosta.
źródło
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt [email protected]:/tmp
~/.ssh/config
jako domyślne, co zrobiłem w moim środowisku:StrictHostKeyChecking no
rsync
w tym przypadku pracować w porównaniu z tymscp
, biorąc pod uwagę opis rsync jako „szybszego, elastycznego zamiennika rcp”.Oto moje podejście do problemu:
Krok 1 - Znajdź klucz prywatny, port ssh i adres IP:
Krok 2 - Prześlij plik, używając portu i klucza prywatnego jako parametrów scp:
Mam nadzieję, że to pomoże,
źródło
Skończyło się to na tym, że trzymałem ten plik w moim błędnym katalogu (automatycznie montowanym jako / vagrant /) i kopiowałem go za pomocą dostawcy powłoki:
źródło
install
np. Srcinstall -D -m644 -C ...
dest. zamiast cp, ponieważ możesz robić takie rzeczy, jak określanie uprawnień, własność, automatyczne tworzenie wiodących katalogów, robienie kopii tylko wtedy, gdy plik wymaga aktualizacji itp. zamiast cp, co jest proste i w porządku, jeśli to wszystko musieć zrobić.Vagrantfile
wraz z pozostałymi dostawcami. Trzeba wymienićpath_within_repo
iremote_file
rzeczy, które mają sens, dla danej aplikacji, oczywiście :)który umieści plik lokalny w katalogu domowym włóczęgi użytkownika
https://www.vagrantup.com/docs/cli/upload.html
źródło
Jeśli nie masz dostępu do plików w katalogu, możesz uruchomić ten kod w pliku skryptu z komputera hosta.
W tej konfiguracji musisz tylko zmienić
/File/To/Copy
plik lub pliki, które chcesz skopiować, a następnie/Where/To/Put/File
jest to lokalizacja na maszynie wirtualnej, do której chcesz skopiować pliki.Jeśli utworzysz ten plik i wywołasz go
copyToServer.sh
, możesz uruchomićsh
polecenie wypchnięcia tych plików.Na koniec nie można uruchomić tego kodu,
provisioner
ponieważ działa on na serwerze gościa, podczas gdy ten kod działa z hosta.źródło
vagrant ssh-config
i wkleić je do swojego pliku ~ / .ssh / config, aby uczynić to jeszcze łatwiejszym w przyszłości. ToOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
ominąć użycie pierwszego wiersza wyniku ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
zgodnie z dokumentacją tutaj: gist.github.com/geedew/11289350Vagrant zapewnia sposób wykonywania komendy ssh zamiast logowania, więc w przypadku hosta i gościa systemu Linux możesz użyć:
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
Nie potrzebujesz wtyczek ani przeładowań gości. Po prostu upewnij się, że podałeś identyfikator skrzynki „Vagrant ssh”, jeśli nie jesteś w tym samym katalogu, co plik Vagrantfile. Testowane na Vagrant v1.8.1.
źródło
Możesz dodać wpis w
~/.ssh/config
:i proste
scp file vagrant:/path/
. Możesz znaleźć ścieżkę do pliku tożsamości za pomocąvagrant ssh-config
polecenia.źródło
vagrant ssh-config
daje ci jeszcze bardziej kompletną i wygodniejszą konfigurację, którą możesz umieścić w swoim ~ / .ssh / config. Ale jeszcze raz dziękuję!Przejdź do katalogu, w którym masz swój
Vagrantfile
Następnie, edytuj swój
Vagrantfile
i dodaj:„.” oznacza katalog, w którym aktualnie znajdujesz się na komputerze- hoście
„/ vagrant” odnosi się do „/ home / vagrant” na maszynie gościa (maszynie Vagrant).
Skopiuj pliki, które chcesz wysłać na maszynę gościa, do folderu, w którym masz swój.
Vagrantfile
Następnie otwórz Git Bash icd
do katalogu, w którym masz swój,Vagrantfile
i wpisz:gdzie XXXXXXX to nazwa twojej maszyny wirtualnej . Możesz uzyskać swoją nazwę VM uruchamiając
źródło
jeśli z jakichś powodów nie masz pozwolenia na korzystanie
istnieje alternatywny sposób:
Najpierw włóczkuj swój VagrantProject , a następnie napisz w terminalu:
będziesz mieć informacje na temat „HostName” i „Port” twojej maszyny wirtualnej.
W niektórych przypadkach w twoim projekcie mogą znajdować się maszyny wirtualne. Więc po prostu znajdź swoją maszynę nadrzędną (ogólnie ta maszyna wirtualna ma port 2222) i nie zwracaj uwagi na informacje innych maszyn.
napisz polecenie, aby wykonać kopię:
Na tym stromiu będziesz musiał podać błędne hasło: domyślnie jest to „włóczęga”
po tym, jeśli spojrzysz na pliki na maszynie wirtualnej:
będziesz mieć plik „file.txt” w katalogu maszyny wirtualnej
źródło
vagrant plugin scp działa, jeśli znasz nazwę swojego błędnego pudełka. sprawdź błędny status globalny, który poda nazwę twojego pudełka, a następnie możesz uruchomić:
źródło
Spróbuj tego .. włóczęga ubuntu 14.04 To zadziałało dla mnie.
źródło
Alternatywny sposób na zrobienie tego bez instalowania czegokolwiek (
vagrant-scp
itp.) Należy pamiętać, że nazwadefault
musi być używana bez zmian , ponieważ jąvagrant ssh-config
emituje.Funkcja nie byłaby konieczna, gdyby
scp -F =(vagrant ssh-config) ...
działała w różnych powłokach. Ponieważ jednak Bash tego nie obsługuje, musimy zastosować to obejście.źródło
Jeśli ktoś chce przenieść plik z hosta Windows do włóczęgi, to rozwiązanie zadziałało dla mnie.
Powinieneś być w stanie zobaczyć katalogi na swojej błędnej maszynie.
źródło
Najlepszy sposób na skopiowanie pliku z lokalnego na włóczęgowaty, bez potrzeby pisania kodu, żadnych zmian lub zmian w konfiguracji. 1- Najpierw włóczęga ( włóczęga ) 2- otwórz cygwin 3- cygwin: przejdź do folderu, w którym znajduje się plik włóczęgi lub skąd uruchamiasz włóczęgę 4- ssh włóczęga 5- teraz będzie działać jak normalny system.
źródło