Самый простой способ скопировать один файл из хоста в гостевой дом 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
.
Ответ 10
vagrant upload localfile
который поместит localfile в домашнюю директорию vagrant user
https://www.vagrantup.com/docs/cli/upload.html
Ответ 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- теперь он будет работать как обычная система.