如何从 Vagrant 虚拟机复制文件到本地主机

44

我想将Vagrant机器上的本地文件复制到localhost,但是出现错误消息:

ssh: connect to host 127.0.0.1 port 22: Connection refused.

[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,但仍然遇到了相同的错误。

7个回答

64

另一个选项是将文件串联到本地:

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

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


1
这是一个非常方便的解决方法,用于尝试从别人设置的vagrant box中获取文件。 - HopAlongPolly

40
你应该阅读 scp 的手册页面。正确的语法是:
scp -P 2222 vagrant@127.0.0.1:/home/vagrant/devstack/local.conf .

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


4
将文件复制到Vagrant虚拟机: scp -i .vagrant/machines/your_machine_name/virtualbox/private_key -P 2222 /path/file vagrant@127.0.0.1: - Yi zhang

33

使用以下方法获取IdentityFile和Port

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 .

谢谢!命令vagrant ssh-config非常方便。 - The Tran

11

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

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

在这里我假设你的vagrant文件没有覆盖机器名称为"default"。如果有,请使用":"替换"default:"。


从vagrant 2.0开始,您可以使用vagrant ssh-config --host my-host控制主机名。 - mzabaluev

9

还有另一个选项,就像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)

其中default是我的虚拟机名称。


5

这是一个对任何通过谷歌进入的人都很有用的工具:Vagrant SCP



0

额外的工具,如scp或cat可能不是必需的。Frederick Henri在这里中进行了介绍。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接