我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
当前回答
以上所有答案都可能管用。但下面对我来说是有效的。我有多个流浪主机:host1, host2。 我想从~/Desktop/file.sh复制文件到主机:host1 我做了:
$vagrant upload ~/Desktop/file.sh host1
这将复制~/Desktop/file.sh在/home/xxxx下,其中xxx是你的流浪用户在host1下
其他回答
既然您要求最简单的方法,我建议使用vagrant-scp。它向vagrant添加了一个scp命令,因此您可以像通常使用scp一样将文件复制到您的VM。
安装通过:
vagrant plugin install vagrant-scp
像这样使用它:
vagrant scp <some_local_file_or_dir> [vm_name]:<somewhere_on_the_vm>
下面是我解决这个问题的方法:
步骤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:~
我希望这对你们有帮助,
您可以在~/.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命令查找身份文件的路径。
缺省情况下,第一个流浪实例使用ssh端口2222,其ip地址为127.0.0.1(如果您创建了多个虚拟主机,可能需要调整端口)
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
因此,您可以运行下面的命令来复制您的本地文件到vagrant实例,而不仅仅是到/vagrant。密码和用户名是一样的。
scp -P 2222 your_file vagrant@127.0.0.1:.
您还可以将文件复制回您的本地主机。
scp -P 2222 vagrant@127.0.0.1:/PATH/filename .
流浪者SCP插件工作,如果你知道你的流浪者盒子名称。 检查vagrant全局状态,它将提供您的盒子名称,然后您可以运行:
流浪的全球地位
id name provider state directory
------------------------------------------------------------------------
13e680d **default** virtualbox running /home/user
Vagrant SCP ~/foobar "name in my case default":/home/"user"/