如何将文件从 Vagrant 机器复制到 localhost

Posted

技术标签:

【中文标题】如何将文件从 Vagrant 机器复制到 localhost【英文标题】:How to copy file from a Vagrant machine to localhost 【发布时间】:2015-12-01 08:02:13 【问题描述】:

我想将本地文件从 Vagrant 机器复制到我的 localhost,但我收到一条错误消息:

ssh: 连接到主机127.0.0.1 端口22: 连接被拒绝。

[user@localhost ceil]$ scp -p 2222 vagrant@127.0.0.1:/home/vagrant/devstack/local.conf .
cp: cannot stat ‘2222’: No such file or directory
ssh: connect to host 127.0.0.1 port 22: Connection refused

我也尝试使用 localhost,但仍然遇到同样的错误。

【问题讨论】:

【参考方案1】:

可能不需要 scp 或 cat 等其他工具。 Frederick Henri 报道了它here。

基本上,cp [file] /var/www/[your vm]/.vagrant 会将文件复制到项目根目录的 .vagrant 文件夹中,您可以在桌面操作系统中查看和移动该文件。

【讨论】:

【参考方案2】:

另一个选项,例如 Dan 链接到:

   vagrant plugin install vagrant-scp
   vagrant scp [vm_name]:<remote_path> <local_path

如果你需要做相反的事情

 vagrant scp <local_path> [vm_name]:<remote_path> 

您可以使用vagrant status 获取虚拟机的名称

Current machine states:

default                   running (virtualbox)

在我的例子中,默认是虚拟机的名称。

【讨论】:

【参考方案3】:

正如@SevenJ 提到的,ssh-config 可以提供您需要的所有信息。但是将它保存到文件并使用该文件要容易得多,而不是构造一个复杂的 scp 命令。例如:

vagrant ssh-config > config.txt
scp -F config.txt default:/path/to/file .

在这里,我假设您的 vagrant 文件不会从“默认”覆盖机器名称。如果是,请将“default:”替换为“:”。

【讨论】:

从 vagrant 2.0 开始,你可以用vagrant ssh-config --host my-host控制主机名【参考方案4】:

您应该阅读scp 的手册页。正确的语法是:

scp -P 2222 vagrant@127.0.0.1:/home/vagrant/devstack/local.conf .

大写的P代表“端口”。小写用于保留修改时间。

【讨论】:

复制文件到vagrant机器:scp -i .vagrant/machines/your_machine_name/virtualbox/private_key -P 2222 /path/file vagrant@127.0.0.1:【参考方案5】:

对于通过 Google 进入的任何人来说,这是一个方便的工具:Vagrant SCP

【讨论】:

【参考方案6】:

通过使用获取 IdentityFile 和端口

vagrant ssh-config

scp -i IdentityFile_file -P Port vagrant@127.0.0.1:/file_dir dist_dir 例如

scp -i /Users/xxxxx/tmp/vagrant/centos_6.5/.vagrant/machines/default/virtualbox/private_key -P 2200  vagrant@127.0.0.1:/tmp/xxx .

【讨论】:

【参考方案7】:

另一个选项是cat 将文件放到本地:

vagrant ssh -c "sudo cat /home/vagrant/devstack/local.conf" > local.conf

这也适用于需要 root 权限的文件(vagrant SCP 插件似乎不支持)。

【讨论】:

这是一个非常方便的解决方法,可以尝试从其他人设置的 vagrant box 中获取文件。

以上是关于如何将文件从 Vagrant 机器复制到 localhost的主要内容,如果未能解决你的问题,请参考以下文章

如何将所有 *.dev 路由到 vagrant box 上的子文件夹

使用 localhost 从主机访问 Vagrant 机器上的 symfony Web 服务器

从虚拟集群转发 Apache Hue 端口?

如何从 vagrant virtualbox 机器连接主机 PostgreSQL

将数据/文件从 Windows 复制到 Linux 机器或 HDFS

Hadoop 将文件复制到 hadoop 文件系统