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

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

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

当我想要做的只是复制一个文件时,编写一个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

在此设置中,您只需要将/File/ to /Copy更改为您想要复制的文件或文件,然后/Where/ to /Put/File是您希望将文件复制到的虚拟机上的位置。

如果您创建了这个文件并将其命名为copyToServer.sh,那么您可以运行sh命令来推送这些文件。

sh ./copyToServer.sh

最后需要注意的是,您不能将此代码作为配置程序运行,因为它运行在Guest服务器上,而此代码则从主机运行。

其他回答

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

安装通过:

vagrant plugin install vagrant-scp

像这样使用它:

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

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

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

和simplescp文件vagrant:/path/。可以使用vagrant ssh-config命令查找身份文件的路径。

如果有人想将文件从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.

您应该能够在您的流浪机器中看到目录。

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

不需要插件或客户重新加载。如果你和Vagrantfile不在同一个目录,请确保提供vagrant box ID给'vagrant ssh'。在Vagrant v1.8.1上测试。

如果你“cd ..”足够多的时间,你会发现vagrant文件夹,其中包含你所有的主机文件和文件夹