将一个文件从主机复制到Vagrant guest的最简单方法?

将一个文件从主机复制到Vagrant guest的最简单方法?,vagrant,Vagrant,我有一个用例,在这个用例中,我偶尔想要将一个文件从主机复制到流浪客 我不想通过传统的供应器(Puppet/Chef)这样做,因为这通常是一次性的——我只想快速添加到我的文件中 我不想共享整个目录,可能是因为我想覆盖一个现有文件,而不在来宾服务器上创建整个目录 当我只想复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎也有点过头了 那么,将一个文件从主机复制到来宾的最简单方法是什么呢?我最后做的是将该文件保存在我的vagrant目录中(自动装载为/vagrant/),并使用shell

我有一个用例,在这个用例中,我偶尔想要将一个文件从主机复制到流浪客

我不想通过传统的供应器(Puppet/Chef)这样做,因为这通常是一次性的——我只想快速添加到我的文件中

我不想共享整个目录,可能是因为我想覆盖一个现有文件,而不在来宾服务器上创建整个目录

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


那么,将一个文件从主机复制到来宾的最简单方法是什么呢?

我最后做的是将该文件保存在我的vagrant目录中(自动装载为/vagrant/),并使用shell provisioner将其复制过来:

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

实际上有一个更简单的解决方案。见:

“请注意,除非您出于某种原因特别需要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中-该目录将自动装入VM中的/vagrant下,以便您可以直接从VM复制或使用它们。”


如果目录中的文件受到限制,则可以在主机的脚本文件中运行此代码

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

scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File
在此设置中,您只需将
/File/to/Copy
更改为要复制的一个或多个文件,然后
/Where/to/Put/File
是您希望将文件复制到的VM上的位置

如果创建此文件并将其命名为
copyToServer.sh
,则可以运行
sh
命令来推送这些文件

sh ./copyToServer.sh

最后,您不能将此代码作为
供应器运行,因为它在来宾服务器上运行,而此代码从主机运行。

您也可以使用Vagrant,而不是使用shell供应器来复制文件

供应器名称:
“文件”

文件供应器允许您将文件从主机上载到来宾计算机

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

scp ${OPTIONS} /File/To/Copy vagrant@YourServer:/Where/To/Put/File

默认情况下,第一个vagrant实例使用ssh端口2222,其ip地址为127.0.0.1(您可能需要使用真实虚拟主机调整端口)

所以您可以运行下面的命令将本地文件复制到vagrant实例。密码与用户名相同,即
vagrant

scp -P 2222 your_file vagrant@127.0.0.1:.
您还可以将文件复制回本地主机

scp -P 2222 vagrant@127.0.0.1:/PATH/filename .

您可以在
~/.ssh/config
中添加条目:

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

以及简单的
scp文件vagrant:/path/
。您可以使用
vagrant ssh config
命令找到标识文件的路径。

既然您要求最简单的方法,我建议使用。它向vagrant添加了一个scp命令,这样您就可以像通常使用scp一样将文件复制到VM

通过以下方式安装:

vagrant plugin install vagrant-scp
像这样使用它:

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

以下是我解决问题的方法:

步骤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
  scp -P 2222 -i /root/.vagrant.d/insecure_private_key \
  someFileName.txt vagrant@127.0.0.1:~
步骤2-使用端口和私钥作为scp参数传输文件:

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
  scp -P 2222 -i /root/.vagrant.d/insecure_private_key \
  someFileName.txt vagrant@127.0.0.1:~

我希望它能有所帮助,

如果你知道你的流浪者盒子的名字,那么流浪者scp插件可以工作。 选中“流浪者全局状态”,该状态将提供您的框名,然后您可以运行:

vagrant scp~/foobar“在我的情况下默认名称”:/home/“user”/


转到存放您的
vagrant文件的目录

然后,编辑您的
vagrant文件
,并添加以下内容:

config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=774','fmode=775']
表示您当前在主机上的目录
“/vagrant”指的是来宾机器上的“/home/vagrant”(流浪机器)

将需要发送到来宾计算机的文件复制到存放您的
vagrant文件的文件夹中
然后打开Git Bash
cd
到存放您的
vagrant文件的目录,然后键入:

vagrant scp config.json XXXXXXX:/home/vagrant/
其中XXXXXXX是您的虚拟机名称。您可以通过运行

vagrant global-status

如果由于某些原因,您没有使用的权限

vagrant plugin install vagrant-scp
还有另一种方法:

首先“流浪者”启动“流浪者项目”,然后在终端上写下:

vagrant ssh-config
您将获得有关虚拟机的“主机名”和“端口”的信息

在某些情况下,您的项目中可能会有一些虚拟机。因此,只需找到您的主计算机(通常,此VM具有2222端口),而不必关注其他计算机的信息

编写命令以制作副本:

scp -P xxPortxx  /Users/where/is/your/file.txt  vagrant@xxHostNamexx:/home/vagrant
在这个陡坡上,您必须输入一个流浪密码: 默认情况下,它是“流浪者”

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

vagrant ssh xxVirtualMachineNamexx
pwd
ls

您的虚拟机目录中将有“file.txt”

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文件不在同一目录中,请确保向“vagrant ssh”提供vagrant box ID。在Vagrant v1.8.1上测试。

将文件从本地复制到Vagrant的最佳方法,无需编写任何代码或任何内容或任何配置更改。 1-首先是流浪者(流浪者向上) 2-开放式cygwin 3-cygwin:转到vagrant文件所在的文件夹或启动vagrant的文件夹 4-ssh流浪汉
5-现在它将像正常系统一样工作

试试这个。。流浪汉ubuntu 14.04 这对我有用

scp -r -P 2222 vagrant@localhost:/home .
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.

不安装任何东西的另一种方法(
vagrant scp
等)请注意,名称
default
需要按原样使用,因为
vagrant ssh config
会发出此信息

vg_scp() {
  tmpfile=$(mktemp /tmp/vagrant-ssh-config.XXXX)
  vagrant ssh-config > $tmpfile
  scp -F $tmpfile "$@"
  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
函数
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.
vagrant upload localfile
    $vagrant upload ~/Desktop/file.sh host1