Самый простой способ скопировать один файл из хоста в гостевой дом Vagrant?

У меня есть прецедент, когда я иногда хочу скопировать один файл с моего хост-компьютера на гостевой Vagrant.

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

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

Также кажется, что немного перехитрить, чтобы написать оболочку script, и иметь дело с потенциальным экранированием, когда все, что я хочу сделать, это скопировать файл.

Итак, какой самый простой способ скопировать один файл из хоста в гостевой?

Ответ 1

Вместо того, чтобы использовать средство обеспечения оболочки для копирования файла, вы также можете использовать средство создания резервных копий

Средство обеспечения файла позволяет загружать файл с главной машины на гостевую машину.

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

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

Ответ 2

Поскольку вы просите самый простой способ, я предлагаю использовать vagrant-scp. Он добавляет команду scp для бродяг, поэтому вы можете копировать файлы на свою виртуальную машину, как обычно, с помощью scp.

Установить через:

vagrant plugin install vagrant-scp

Используйте его так:

vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>

Ответ 3

На самом деле существует гораздо более простое решение. См. https://gist.github.com/colindean/5213685/#comment-882885:

"обратите внимание, что, если вы специально не захотите scp по какой-либо причине, самый простой способ передать файлы с хоста на виртуальную машину - просто поместить их в тот же каталог, что и Vagrantfile, - этот каталог автоматически устанавливается под/бродягой в VM, чтобы вы могли копировать или использовать их непосредственно с виртуальной машины".

Ответ 4

По умолчанию первый экземпляр vagrant использует порт ssh как 2222, а его IP-адрес - 127.0.0.1 (вам может потребоваться настроить порт для реального виртуального хоста)

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

Таким образом, вы можете запустить команду ниже, чтобы скопировать ваш локальный файл в vagrant экземпляр. пароль совпадает с именем пользователя, которое является vagrant.

scp -P 2222 your_file [email protected]:.

Вы также можете скопировать файл обратно на ваш локальный хост.

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

Ответ 5

Вот мой подход к проблеме:

Шаг 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:

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

Надеюсь, это поможет,

Ответ 6

То, что я закончил, состояло в том, чтобы сохранить файл в моем бродяжном каталоге (автоматически установленном как /vagrant/ ) и скопировать его с помощью средства обеспечения оболочки:

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

Ответ 7

Если вы ограничены наличием файлов в своем каталоге, вы можете запустить этот код в файле script с главной машины.

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

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

В этой настройке вам нужно только изменить /File/To/Copy на файл или файлы, которые вы хотите скопировать, а затем /Where/To/Put/File - это местоположение на виртуальной машине, в которой вы хотите скопировать файлы.

Если вы создадите этот файл и назовете его copyToServer.sh, вы можете запустить команду sh, чтобы нажать эти файлы.

sh ./copyToServer.sh

Как последнее замечание, вы не можете запустить этот код как provisioner, потому что он запускается на гостевом сервере, а этот код работает с хостом.

Ответ 8

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. Протестировано на Vagrant v1.8.1.

Ответ 9

Вы можете добавить запись в ~/.ssh/config:

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

и простой scp file vagrant:/path/. Вы можете найти путь к файлу идентификации с помощью команды vagrant ssh-config.

Ответ 11

если по каким-либо причинам у вас нет разрешения на использование

vagrant plugin install vagrant-scp

существует альтернативный способ:

Сначала брандмауэр yourVagrantProject, затем напишите в терминале:

vagrant ssh-config

у вас будет информация о "HostName" и "Port" вашей виртуальной машины.

В некоторых случаях у вас могут быть некоторые виртуальные машины в вашем проекте. Так что просто найдите свою мастер-машину (в общем, эта виртуальная машина имеет порт 2222) и не обращайте внимания на информацию других машин.

напишите команду, чтобы сделать копию:

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

На этом крутом вам нужно будет ввести бродячий пароль: по умолчанию это "бродяга"

после этого, если вы посмотрите файлы на своей виртуальной машине:

vagrant ssh xxVirtualMachineNamexx
pwd
ls

у вас будет файл "file.txt" в вашем каталоге виртуальных машин

Ответ 12

Перейдите в каталог, в котором у вас есть Vagrantfile
Затем отредактируйте свой Vagrantfile и добавьте следующее:

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

"." означает каталог, который вы сейчас используете на хост-машине
"/бродяга" относится к "/home/vagrant" на машине guest (машина для бродяг).

Скопируйте файлы, которые необходимо отправить на гостевую машину, в папку, в которой у вас есть Vagrantfile Затем откройте Git Bash и cd в каталог, где у вас есть Vagrantfile, и введите:

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

где XXXXXXX является вашим именем vm. Вы можете получить свое имя vm, запустив

vagrant global-status

Ответ 13

vagrant scp plugin работает, если вы знаете свое имя бродячего ящика. проверьте бранный глобальный статус, который предоставит ваше имя поля, после чего вы можете запустить:

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

vagrant scp ~/foobar "в моем случае по умолчанию":/home/ "user" /

Ответ 14

Альтернативный способ сделать это без установки чего-либо (vagrant-scp и т.д.) Обратите внимание, что имя по default необходимо использовать как есть, так как vagrant ssh-config выдает.

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

Функция не была бы необходимой, если бы scp -F =(vagrant ssh-config)... работал бы через оболочки. Но поскольку Bash это не поддерживает, мы должны прибегнуть к этому обходному пути.

Ответ 15

Если кто-то хочет перенести файл с хоста Windows на vagrant, то это решение сработало для меня.

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.

Вы должны быть в состоянии видеть каталоги на своем бродячем компьютере.

Ответ 16

Попробуйте это. vagrant ubuntu 14.04 Это сработало для меня.

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

Ответ 17

Это может быть улучшение для хороших ответов здесь

1) Да, установите vagrant-scp

 vagrant plugin install vagrant-scp

2) [vm_name] необязательно

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

3) нет необходимости в -r в случае dir

vagrant scp thisDir :/this/dirVagrant/dir/

4) работает другой способ загрузки файлов из Vagrant

vagrant scp :/somefile.txt  thisLocalDir 

Ответ 18

Лучший способ скопировать файл из локального в бродягу, не нужно писать какой-либо код или какую-либо вещь или какие-либо изменения конфигурации. 1- Сначала бродяга (бродяга вверх) 2- открытый кигвин 3- cygwin: перейдите в свою папку, где находится бродячий файл или откуда вы запускаете бродягу 4- ssh vagrant 5- теперь он будет работать как обычная система.