我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
我有一个用例,我偶尔想从我的主机复制一个文件到Vagrant客户机。
我不想这样做通过传统的供应(木偶/厨师),因为这往往是一次性的-我只是想快速添加到我的Vagrantfile。
我不想共享整个目录,可能是因为我想覆盖现有文件,而不破坏客户机上的整个目录。
当我想要做的只是复制一个文件时,编写一个shell配置脚本并处理潜在的转义似乎有点过分。
那么,将单个文件从主机复制到客户机的最简单方法是什么?
当前回答
缺省情况下,第一个流浪实例使用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 .
其他回答
最好的方式复制文件从本地到流浪,不需要写任何代码或任何东西或任何配置更改。 1-首先是流浪汉(流浪汉起来) 2-打开cygwin 3- cygwin:去你的文件夹是vagrantfile或从哪里启动vagrant 4- SSH流浪汉 5-现在它将像一个正常的系统。
如果您的目录中不能包含这些文件,则可以在主机的脚本文件中运行此代码。
#!/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服务器上,而此代码则从主机运行。
其实有一个更简单的解决方案。看到https://gist.github.com/colindean/5213685/评论- 882885:
"请注意,除非您出于某种原因特别想要scp,否则将文件从主机传输到VM的最简单方法是将它们放在与Vagrantfile相同的目录中-该目录会自动挂载在VM的/vagrant下,因此您可以直接从VM复制或使用它们。"
如果出于某些原因,你没有被允许使用
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”文件
以上所有答案都可能管用。但下面对我来说是有效的。我有多个流浪主机:host1, host2。 我想从~/Desktop/file.sh复制文件到主机:host1 我做了:
$vagrant upload ~/Desktop/file.sh host1
这将复制~/Desktop/file.sh在/home/xxxx下,其中xxx是你的流浪用户在host1下