У меня есть сценарий использования, в котором я иногда хочу скопировать один файл с моей хост-машины на гостя Vagrant.
Я не хочу делать это через традиционных провайдеров (Puppet / Chef), потому что это часто одноразово - я просто хочу что-то быстрое добавить в мой Vagrantfile.
Я не хочу совместно использовать весь каталог, возможно, потому что я хочу перезаписать существующий файл, не удаляя весь каталог в гостевой системе.
Также кажется немного излишним писать сценарий инициализации оболочки и иметь дело с потенциальным выходом, когда все, что я хочу сделать, это скопировать файл.
Итак, как проще всего скопировать один файл с хоста на гостя?
/vagrant
как упомянуто здесь, также может быть хорошим вариантомvagrant upload /path/to/my/file
...vagrant scp file.txt :~/.
Ответы:
Вместо того, чтобы использовать поставщика оболочки для копирования файла, вы также можете использовать поставщик файлов Vagrant .
источник
/tmp
Поскольку вы просите самый простой способ, я предлагаю использовать vagrant-scp . Он добавляет команду scp в vagrant, так что вы можете копировать файлы на вашу виртуальную машину, как вы это обычно делаете с scp.
Установить через:
Используйте это так:
источник
vagrant plugin
».vagrant scp /vagrant/www/koushik.php ubuntu/trusty64:/usr/share/nginx/html
Я пытаюсь скопировать файлы в корневой каталог nginx.The machine with the name 'C' was not found configured for this Vagrant environment.
Там написано : каталог и все нормально.На самом деле есть гораздо более простое решение. См. Https://gist.github.com/colindean/5213685/#comment-882885 :
источник
config.vm.synced_folder ".", "/vagrant", disabled: false
и тогдаvagrant reload
centos/7
бродячей коробкой, если вы пытаетесь выполнить обратную операцию (бродячая коробка с локальной машиной).По умолчанию первый экземпляр vagrant использует порт ssh как 2222, а его IP-адрес - 127.0.0.1 (вам может потребоваться настроить порт для реального виртуального хоста)
Таким образом, вы можете запустить команду ниже, чтобы скопировать ваш локальный файл в vagrant экземпляр. пароль совпадает с именем пользователя
vagrant
.Вы также можете скопировать файл обратно на ваш локальный хост.
источник
scp -P 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no my-file.txt matt@127.0.0.1:/tmp
~/.ssh/config
по умолчанию, что я и сделал в моей среде:StrictHostKeyChecking no
rsync
работу в этом случае по сравнению сscp
приведенным описанием rsync как «более быстрой и гибкой заменой rcp».Вот мой подход к проблеме:
Шаг 1 - Найти закрытый ключ, порт ssh и IP:
Шаг 2 - Передайте файл, используя порт и закрытый ключ в качестве параметров для scp:
Я надеюсь, что это помогает,
источник
В итоге я оставил файл в своем каталоге vagrant (автоматически смонтирован как / vagrant /) и скопировал его с помощью поставщика оболочки:
источник
install
например,install -D -m644 -C ...
src dest. вместо cp, потому что вы можете делать такие вещи, как указание прав доступа, владение, автоматическое создание ведущих каталогов, копировать только в том случае, если необходимо обновить файл и т. д. ... вместо cp, что просто и хорошо, если это все, что вам нужно нужно сделать.Vagrantfile
вместе с другими вашими провайдерами. Вам нужно будет заменитьpath_within_repo
иremote_file
вещами, которые имеют смысл, для вашего приложения, конечно :)который поместит localfile в домашнюю директорию бродячего пользователя
https://www.vagrantup.com/docs/cli/upload.html
источник
Если вы не можете хранить файлы в своем каталоге, вы можете запустить этот код в файле сценария с хост-компьютера.
В этой настройке вам нужно всего лишь перейти
/File/To/Copy
к файлу или файлам, которые вы хотите скопировать, и затем/Where/To/Put/File
указать место на виртуальной машине, в которую вы хотите скопировать файлы.Если вы создаете этот файл и вызываете его,
copyToServer.sh
вы можете запуститьsh
команду, чтобы отправить эти файлы.В заключение, вы не можете запускать этот код как код,
provisioner
потому что он запускается на гостевом сервере, а этот код запускается с хоста.источник
vagrant ssh-config
и вставить его в свой файл ~ / .ssh / config, чтобы сделать это еще проще в будущем. Т.е. объединяя это с ответомOPTIONS=`vagrant ssh-config | tail -n +2 | awk -v ORS=' ' '{print "-o " $1 "=" $2}'`
опустить использование первой строки вывода ssh-config.OPTIONS=`vagrant ssh-config | grep -v '^Host ' | awk -v ORS=' ' 'NF{print "-o " $1 "=" $2}'`
как описано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
Нет необходимости для плагинов или перезагрузок гостя. Просто убедитесь, что вы предоставили vagrant box ID vagrant ssh, если вы не в том же каталоге, что и Vagrantfile. Проверено на Vagrant v1.8.1.
источник
Вы можете добавить запись в
~/.ssh/config
:и простой
scp file vagrant:/path/
. Вы можете найти путь к файлу идентификации, используяvagrant ssh-config
команду.источник
vagrant ssh-config
дает вам еще более полный и удобный фрагмент конфигурации, который вы можете вставить в ~ / .ssh / config. Но еще раз спасибо!Перейдите в каталог, где у вас есть свой
Vagrantfile
Затем, отредактируйте свой
Vagrantfile
и добавьте следующее:"" означает, что каталог, в котором вы сейчас находитесь на хост-компьютере,
"/ vagrant" ссылается на "/ home / vagrant" на гостевой машине (Vagrant machine).
Скопируйте файлы, которые нужно отправить на гостевой компьютер, в папку, где у вас есть.
Vagrantfile
Затем откройте Git Bash иcd
в каталог, где у вас есть,Vagrantfile
и введите:где XXXXXXX - ваше имя виртуальной машины . Вы можете получить ваше имя VM, запустив
источник
если по каким-то причинам у вас нет разрешения на использование
Есть альтернативный способ:
Сначала выпустите ваш vagrantProject , затем напишите в терминале:
у вас будет информация о «HostName» и «Port» вашей виртуальной машины.
В некоторых случаях в вашем проекте может быть несколько виртуальных машин. Так что просто найдите свою мастер-машину (как правило, эта виртуальная машина имеет порт 2222), и не обращайте внимания на информацию о других машинах.
напишите команду, чтобы сделать копию:
На этом круче вам придется поставить бродячий пароль: по умолчанию он "бродячий"
после этого, если вы посмотрите на файлы на вашей виртуальной машине:
у вас будет файл "file.txt" в каталоге вашей виртуальной машины
источник
Плагин vagrant scp работает, если вы знаете свое имя vagrant box. проверьте глобальный статус vagrant, который предоставит имя вашего ящика, после чего вы можете запустить:
источник
Попробуйте это .. vagrant Ubuntu 14.04 Это сработало для меня.
источник
Альтернативный способ сделать это без установки чего-либо (
vagrant-scp
и т. Д.) Обратите внимание, что имяdefault
должно использоваться как есть, так как оноvagrant ssh-config
выбрасывается.Функция не была бы необходимой, если
scp -F =(vagrant ssh-config) ...
бы работала через оболочки. Но поскольку Bash это не поддерживает, мы должны прибегнуть к этому обходному пути.источник
Если кто-то хочет перенести файл с хоста Windows на vagrant, то это решение сработало для меня.
Вы должны быть в состоянии видеть каталоги на своем бродячем компьютере.
источник
Лучший способ скопировать файл из локального в vagrant, не нужно писать какой-либо код или любую вещь или какие-либо изменения конфигурации. 1 - Сначала запустите vagrant (vagrant up ) 2 - откройте cygwin 3 - cygwin: перейдите в папку, где находится vagrantfile, или откуда вы запускаете vagrant 4 - ssh vagrant 5 - теперь он будет работать как обычная система.
источник