我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。

我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。

我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。

当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。

那么,将单个文件从主机复制到客户机的最简单方法是什么?


当前回答

vagrant upload localfile

这将把localfile放在流浪者用户的主目录

https://www.vagrantup.com/docs/cli/upload.html

其他回答

除了使用shell提供程序复制文件外,还可以使用Vagrant文件提供程序。

提供者名称:“file” 文件提供程序允许您将文件从主机上传到客户计算机。

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

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

下面是我解决这个问题的方法:

步骤1 -找到私钥,ssh端口和IP:

root@vivi:/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 vagrant@127.0.0.1:~

我希望这对你们有帮助,

最好的方式复制文件从本地到流浪,不需要写任何代码或任何东西或任何配置更改。 1-首先是流浪汉(流浪汉起来) 2-打开cygwin 3- cygwin:去你的文件夹是vagrantfile或从哪里启动vagrant 4- SSH流浪汉 5-现在它将像一个正常的系统。

如果出于某些原因,你没有被允许使用

vagrant plugin install vagrant-scp

还有另一种方法:

首先在你的vagrantproject上流浪,然后在终端上写:

vagrant ssh-config

你会有关于虚拟机的“主机名”和“端口”的信息。

在某些情况下,您的项目中可能有一些虚拟机。因此,只需找到您的主机(通常,这个VM的端口为2222),不要关注其他机器的信息。

编写命令来复制:

scp -P xxPortxx  /Users/where/is/your/file.txt  vagrant@xxHostNamexx:/home/vagrant

在这种情况下,你必须设置一个流浪密码: 默认是"vagrant"

在那之后,如果你查看虚拟机中的文件:

vagrant ssh xxVirtualMachineNamexx
pwd
ls

在虚拟机目录中会有“file.txt”文件

我最终做的是将文件保存在我的vagrant目录中(自动挂载为/vagrant/),并使用shell供应程序复制它:

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