Самы просты спосаб для капіявання аднаго файла з хаста бадзяжных госця?

У мяне ёсць выпадак выкарыстання, дзе я часам патрабуецца скапіяваць адзін файл з майго гаспадара машыны госця Валацуга.

Я не хачу, каб зрабіць гэта з дапамогай традыцыйных provisioners (лялечных/Chef), таму што гэта часта аднаразовым - я проста хачу нешта хутка, каб дадаць да майго Vagrantfile.

Я не хачу дзяліць увесь каталог, магчыма, таму што я хачу, каб перазапісаць існуючы файл без выдалення змесціва дыска ўсяго каталога на госця.

Гэта таксама здаецца трохі залішнім, каб напісаць сцэнар абалонкі харчавання, і мець справу з патэнцыйным уцёкамі, калі ўсё, што я хачу зрабіць, гэта скапіяваць файл.

Такім чынам, што гэта самы просты спосаб для капіявання аднаго файла з хаста для госця?

186
адзначыць, што прыняты адказ заснаваны на Vagrant 1.x-- з выкарыстаннем файла Provisioner з'яўляецца стандартнай Vagrant 2 падыходу , хоць змяняючы кропку мантавання /валацуга як ужо згадвалася тут таксама можа быць добрым варыянтам
дададзена аўтар STW, крыніца

15 адказы

Так як вы просіце самы просты спосаб, я прапаную выкарыстоўваць валацуга-УПП . Ён дадае каманду ПКПП валацугі, так што вы можаце капіяваць файлы віртуальнай машыны, як вы звычайна робіце з УПП.

Ўсталяваць з дапамогай:

vagrant plugin install vagrant-scp

Выкарыстоўвайце яго так:

vagrant scp  [vm_name]:
189
дададзена
Тое ж пытанне, як Rockerston
дададзена аўтар Abram, крыніца
Працуе як шарм ў Vagrant 2.0.2
дададзена аўтар James, крыніца
Я паспрабаваў гэтую каманду, каб скапіяваць файлы, але не працуе і дае памылку валацуга УПП /vagrant/www/koushik.php убунту/trusty64:/USR/долі/Nginx/html Я спрабую капіяваць файлы ў каталог Nginx кораня. Ён кажа, Машына з імем «C» не знойдзены сканфігураваная для гэтага асяроддзя Vagrant. Каталог і ўсё ў парадку.
дададзена аўтар Koushik Das, крыніца
Прывітанне Rod, валацуга-УПП працуе з Vagrant 1.7+. Ад памылкі вы адкрылі, вы працуеце 1.4.3. Калі вам патрэбны гэты убудова, я баюся, вам давядзецца абнавіць (які хутка і бязбольна).
дададзена аўтар Luca Invernizzi, крыніца
Прывітанне Абрам, калі ласка, зірнуць на риой , ён пакажа вам, як абнавіць Vagrant версія.
дададзена аўтар Luca Invernizzi, крыніца
Гэта не працуе для мяне. Я усталяваў убудова, але працягваў атрымліваць памылку, што сказаў «убудова" валацуга-УПП "не можа быць знойдзены. Калі ласка, пераканайцеся, што ён правільна усталяваны з дапамогай валацугі плагіна ».
дададзена аўтар rockerston, крыніца
Адна рэчы, каб дадаць: Вы павінны выкарыстоўваць ідэнтыфікатар машыны, якую вы можаце атрымаць з вандроўным глабальным статусам у першым слупку. Nontheless, гэта лепшае рашэнне імхо.
дададзена аўтар min hundje, крыніца
Гэта не працуе для мяне, як я ёсць некалькі VMS і па нейкай прычыне былі праблемы нават пасля ўказанні імя VM. Тое, што я ліквідуецца рабіць гэта хостынг файл як URL і яго загрузку.
дададзена аўтар invertedfjord, крыніца

Існуе на самой справе значна больш простае рашэнне. См https://gist.github.com/colindean/5213685/#comment-882885 :

<�Р> "Калі ласка, звярніце ўвагу, што калі вы адмыслова не хочаце УПП па нейкай прычыне, самы просты спосаб перадачы файлаў з кампутара на віртуальную машыну, каб проста пакласці іх у тым жа каталогу, што і Vagrantfile - гэты каталог аўтаматычна мантуецца ў/валацуга ў ВМ, так што вы можаце капіяваць або выкарыстоўваць іх непасрэдна з віртуальнай машыны ".
122
дададзена
Яго лепш выкарыстоўваць валацуга ініцыялізацыі, як LeexGreen выкарыстоўвалі.
дададзена аўтар tokhi, крыніца
Гэта выдатна працуе для мяне пры капіяванні файла з маёй Ubuntu 14 валацугі VM да майго гаспадару. Дзякуй !!
дададзена аўтар XtraSimplicity, крыніца
гэта робіць <�я> не праца на CentOS/7 валацуга поле, калі спрабуюць зрабіць зваротную аперацыю (валацуга скрыню для лакальнай машыны).
дададзена аўтар Ryan Tuck, крыніца
Гэта менавіта тое, што робіць мой адказ ... ён запускае абалонку Provisioner, каб скапіяваць файл з/валацугі /.
дададзена аўтар LeeXGreen, крыніца
Пераканайцеся ў тым, што config.vm.synced_folder "/ валацуга", "адключаны." Хлусня , а затым валацуга перазарадка
дададзена аўтар Christopher Markieta, крыніца

Па змаўчанні, першы вандроўнага выкарыстання асобніка SSH порт, як 2222, і яго IP-адрас з'яўляецца 127.0.0.1 (Вы, магчыма, спатрэбіцца наладзіць порт з рэальнай віртуальнага хаста)

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

Такім чынам, вы можаце запусціць наступную каманду, каб скапіяваць лакальны файл у вандроўную інстанцыю. пароль такой жа, як імя карыстальніка, які валацуга .

scp -P 2222 your_file [email protected]:.

Вы можаце таксама скапіяваць файл назад на лакальны хост.

scp -P 2222 [email protected]:/PATH/filename .
81
дададзена
Я буду рэкамендаваць, каб дадаць гэтыя параметры SSH ў ~/.ssh/канфігурацыі па змаўчанні, які я зрабіў гэта ў маёй асяроддзі: ня StrictHostKeyChecking няма
дададзена аўтар BMW, крыніца
+1 + Калі адзін мае больш за адну віртуальнай машыны значэнне порта варта прымаць з карыстацкага інтэрфейсу ў Oracle VM VirtualBox Manager - выберыце віртуальную машыну злева, налады сеткі, перанакіраванне партоў
дададзена аўтар Yordan Georgiev, крыніца
Дзіўна, наколькі цяжэй атрымаць Rsync для работы ў гэтым выпадку ў параўнанні з Scp , улічваючы апісанне RSync як «хуткі, гнуткі замена RCP.»
дададзена аўтар Wildcard, крыніца
Я павінен быў зрабіць гэта і адключыць строгую праверку ключа: УПП -P 2222 -o UserKnownHostsFile =/DEV/нуль -o StrictHostKeyChecking = няма маёй-file.txt [email protected]:/TMP
дададзена аўтар Matt, крыніца
Гэта лепш, чым прынята адказваць./Валацуга каталог не заўсёды.
дададзена аўтар jimm101, крыніца
77
дададзена
@orbatschow У мяне была такая ж праблема, але калі я скапіяваў яго /TMP
дададзена аўтар Ben, крыніца
Гэта рашэнне гучыць добра, але я не магу скапіяваць любы файл з-за памылкі дазволу.
дададзена аўтар orbatschow, крыніца
гэта не тое, што прасілі ОП. пытанне ў тым, як <�я> часам перадача файлаў; неабходнасць запуску ініцыялізацыі з'яўляецца празмернасцю.
дададзена аўтар axd, крыніца
Гэта, безумоўна, лепшы спосаб зрабіць гэта ў Vagrant 2! Аднак, Валацуга 2 не быў даступны ў той час, мне трэба, каб зрабіць гэта ... :)
дададзена аўтар LeeXGreen, крыніца
Гэта дапаможа скапіяваць і зрабіць усё аперацыі на валацугу, якога вы шукаеце stackoverflow.com/questions/16704059/…
дададзена аўтар D-2020365, крыніца

Вось мой падыход да праблемы:

<�Моцны> Крок 1 - Знайсці сакрэтны ключ, SSH порт і IP:

[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

<�Моцны> Крок 2 - файл перадачы, выкарыстоўваючы порт і сакрэтны ключ у якасці параметраў для УПП:

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

Я спадзяюся, што гэта дапамагае,

44
дададзена
Гэта самы просты спосаб. Дзякуй.
дададзена аўтар elmonkeylp, крыніца
З дапамогай ключа дазволіла мне перадаць файл. Чым вышэй адказ без гэтай інфармацыі не працуе, так што дзякуй!
дададзена аўтар inostia, крыніца

Тое, што я ў канчатковым выніку робіць было захаваць файл у маёй вандроўнага дырэкторыі (аўтаматычна усталёўваецца ў/валацуга /) і скапіяваць яго з Provisioner абалонкі:

command = "cp #{File.join('/vagrant/', path_within_repo)} #{remote_file}"
config.vm.provision :shell, :inline => command
27
дададзена
@LeeXGreen. Я спрабую зрабіць тое ж самае, што вы спрабавалі зрабіць, але я не зусім разумею ваш адказ. Магчыма, вы набіраеце гэты радок кода ў тэрмінале? Дзе менавіта вы размяшчае што?
дададзена аўтар Dan Rubio, крыніца
Я б рэкамендаваў выкарыстоўваць Coreutils ўсталяваць напрыклад <�Код> ўсталяваць -D -m644 -C ... ЦСІ Dest. замест ф, таму што вы можаце рабіць такія рэчы, як пазначыць дазволу, права ўласнасці, аўтаматычна ствараць вядучыя каталогі, толькі зрабіць копію, калі неабходна абнавіць, і г.д. файл ... замест ф, які з'яўляецца простым і добра, калі гэта ўсё, што вы трэба зрабіць.
дададзена аўтар xenoterracide, крыніца
Працуе, але я атрымліваю «па змаўчанні: STDIN: гэта не тэрмінал» памылка
дададзена аўтар radtek, крыніца
Фрагмент кода з майго адказу ідзе ў ваш Vagrantfile нароўні з астатнімі provisioners. Вам трэба замяніць path_within_repo і remote_file з рэчамі, якія маюць сэнс для вашага прыкладання, вядома :)
дададзена аўтар LeeXGreen, крыніца

Калі вы сціснутыя ад наяўнасці файлаў у каталогу, вы можаце запусціць гэты код у файл сцэнарыя з хост-машыны.

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

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

У гэтай ўстаноўцы, вам трэба ўсяго толькі змяніць /Файл/Да/Капіяваць у файл або файлы, якія вы хочаце скапіяваць, а затым /Дзе/Да/Put/Файл з'яўляецца размяшчэнне на віртуальнай машыне вы хочаце, каб файлы, скапіяваныя.

Калі стварыць гэты файл і назавіце яго copyToServer.sh вы можаце запусціць ш каманды, каб рассунуць гэтыя файлы.

sh ./copyToServer.sh

У якасці апошняй ноты, вы не можаце запусціць гэты код як Provisioner , таму што працуе на сэрвэры наведвальнікаў, у той час як гэты код працуе ад хаста.

17
дададзена
У якасці альтэрнатывы, каб выдаліць «дырэктыва хаста не падтрымліваецца» памылкі вы можаце выкарыстоўваць OPTIONS = `валацуга SSH-канфігурацыю | Grep -v '^ Хост' | AWK -v ПРС = » '' NF {друку" -o "$ 1" = "$ 2} '` як апісана тут: gist.github.com/geedew/11289350
дададзена аўтар user783836, крыніца
Гэта, верагодна, лепшае рашэнне за межамі ўстаноўкі валацугі-Scp плагіна. Ён выкарыстоўвае канфігурацыю SSH, які выкарыстоўвае Vagrant таму ён можа апрацоўваць розныя сеткавыя налады, якія прадстаўляюцца рознымі пастаўшчыкамі.
дададзена аўтар Sandy Chapman, крыніца
Nice! Я прапаную вам таксама адзначыць, што людзі могуць проста ўзяць выхад валацуга SSH-канфігурацыі і ўстаўце яго ў свой ~/.ssh файл/канфігурацыі, каб зрабіць гэта яшчэ прасцей у будучыні. гэта значыць спалучаючы гэта з адказам ЗСН ў
дададзена аўтар nealmcb, крыніца
Я знайшоў, што гэта неабходна, каб прапусціць першы радок вываду SSH-канфігурацыю, каб пазбегнуць памылак «Host дырэктывы не падтрымліваецца ў якасці опцыі каманднага радка» - выкліканай загалоўку падзелу SSH-канфігурацыі: «Host па змаўчанні». Такім чынам, мой скрыпт OPTIONS = `вандроўнага SSH-конфіг | Хвост -n +2 | AWK -v ПРС = » '' {Друкаваць" -o "$ 1" = "$ 2} '` , каб апусціць з дапамогай гэтай першай радку вываду SSH-канфігурацыі.
дададзена аўтар troyfolger, крыніца

Вы можаце дадаць запіс у ~/.ssh/канфігурацыі :

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

і просты УПП файл валацуга:/шлях/. Вы можаце знайсці шлях да файла асабістых дадзеных з дапамогай вандроўнага SSH-конфіг каманды .

9
дададзена
Вельмі карысна, і дапамагае высветліць, што адбываецца. Гэта дазваляе капіяваць ў абодвух напрамках, рабіць рэкурсіўныя копіі і г.д. і выкарыстоўвае наяўныя веды УПП/SSH добра
дададзена аўтар nealmcb, крыніца
Я толькі што перачытаў адказы вышэй, і выявіў, гуляючы адказ Wiht geedew, што вандроўную SSH-CONFIG дае вам яшчэ больш поўнай і зручнай канфігурацыі адрэзала, што вы можаце пакласці ў ~/.ssh/канфігурацыі. Але яшчэ раз дзякуй!
дададзена аўтар nealmcb, крыніца

Vagrant прадастаўляе магчымасць выканаць каманду праз SSH замест ўваходу ў сістэму, так і для Linux гаспадара і госця вы можаце выкарыстаць:

  • ад хаста для гасцей:

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

Няма неабходнасці убудоў або гасцявых перазагружаецца. Проста пераканайцеся, каб забяспечыць валацугу акно ідэнтыфікатара «вандроўны SSH», калі вы не ў тым жа дырэкторыі, што і Vagrantfile. Праверана на бадзяжных V1.8.1.

9
дададзена
Ад госця які прымае падыходу не захоўваюць спецыяльныя сімвалы ў файлах
дададзена аўтар Dr.X, крыніца

калі па нейкіх прычынах ў вас няма дазволу на выкарыстанне

vagrant plugin install vagrant-scp

ёсць альтэрнатыўны спосаб:

Па-першае вандроўная ўверх <�моцны> yourVagrantProject </моцны>, затым запісаць у тэрмінале:

vagrant ssh-config

вы будзеце мець інфармацыю пра «Hostname» і «Порту» вашай віртуальнай машыны.

У некаторых выпадках, вы можаце мець некалькі віртуальных машын у вашым праекце. Так проста знайсці свой майстар-машына (увогуле, гэтая VM мае порт 2222), і не звяртаць увагу на іншыя машыны інфармацыі.

напісаць каманду, каб зрабіць копію:

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

На гэтым стромкім вы павінны паставіць вандроўны пароль: Па змаўчанні гэта «валацуга»

пасля гэтага, калі вы паглядзіце на файлы ў вашай віртуальнай машыне:

vagrant ssh xxVirtualMachineNamexx
pwd
ls

вы будзеце мець «file.txt» ў віртуальнай каталогу машыны

6
дададзена
пасля ўводу ў вандроўнага пароль я атрымліваю «Адмоўлена ў доступе"
дададзена аўтар user2568374, крыніца
але гэта было звязана з правамі на мэтавай дырэкторыі. Я скапіяваў в/дома/валацуга і што зрабіла працу.
дададзена аўтар user2568374, крыніца

Перайдзіце ў каталог, дзе ў вас ёсць свой Vagrantfile
Затым зменіце Vagrantfile і дадайце наступныя радкі:

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

"." means the directory you are currently in on your host machine
"/vagrant" refers to "/home/vagrant" on the guest machine(Vagrant machine).

Скапіруйце файлы, неабходныя для адпраўкі ў гасцявую машыну ў тэчку, дзе ў вас ёсць свой Vagrantfile Затым адкрыйце <�моцны> Git Bash і CD ў каталог, дзе ў вас ёсць свой Vagrantfile і ўвядзіце:

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

дзе XXXXXXX ваша імя <�моцны> ут . Вы можаце атрымаць імя віртуальнай машыны, запусціўшы

vagrant global-status
5
дададзена
Ідэальна падыходзіць для мяне дзякуй !!! усё ў/вандроўнага тэчцы
дададзена аўтар Gustavo, крыніца
Рады, што працаваў для вас.
дададзена аўтар akshaynagpal, крыніца
Дзякуй за даволі адказ. працаваў як шарм.
дададзена аўтар sathiyarajan, крыніца

валацуга УПП убудова працуе, калі вы ведаеце, ваша імя бадзяжных скрынак. праверыць вандроўны глабальны-статус, які забяспечыць ваша імя вокны, то вы можаце запусціць:

<�Папярэдне> валацуга глабальны статус
id       name    provider   state   directory
------------------------------------------------------------------------
13e680d  **default** virtualbox running /home/user
<�Р> валацуга УПП ~/Foobar "імя ў маім выпадку па змаўчанні":/дома/"карыстальнік"/
3
дададзена
гэта працуе для мяне. рэдагавання таксама карысна, я б таксама ўключаць у сябе каманду для ўстаноўкі вандроўнага Scp плагіна.
дададзена аўтар WhyAyala, крыніца

Лепшы спосаб скапіяваць файл з лакальнага на Vagrant, няма неабходнасці пісаць код або любую рэч, або якія-небудзь змены ў канфігурацыі. 1- Спачатку валацуга (<�б> Vagrant да ) 2- адкрыта Cygwin 3- Cygwin: перайсці ў тэчку, дзе знаходзіцца vagrantfile ці адкуль вы запускаеце валацуга 4- <�б> SSH вандроўная 5- цяпер ён будзе працаваць як звычайныя сістэмы.

2
дададзена
Так, Вы маеце рацыю па гэтым пытанні ...
дададзена аўтар D-2020365, крыніца
Адна з праблем, я выявіў з гэтым падыходам: калі вандроўныя неабходна наладзіць Guest Additions, каталог/валацугі не можа фактычна быць устаноўлены, калі прабегі файла Provisioner.
дададзена аўтар Torenware Networks, крыніца

Альтэрнатыўны спосаб зрабіць гэта без ўстаноўкі ( валацуга-УПП і г.д.) Звярніце ўвагу, што імя па змаўчанні павінен быць выкарыстаны, як ёсць, так як вандроўнага SSH-конфіге выпраменьвае гэта.

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

Функцыя не будзе неабходнасцю, калі УПП -F = (валацуга SSH-канфігурацыя) ... працаваў бы па абалонкам. Але так як гэта не падтрымліваецца Bash, мы павінны звяртацца да гэтага абходнаму.

0
дададзена

Паспрабуйце гэта .. валацуга убунту 14.04 Гэта працуе для мяне.

scp -r -P 2222 [email protected]:/home .
0
дададзена