如何将文件从 Vagrant 机器复制到本地主机

问题描述 投票:0回答:8

我想将本地文件从 Vagrant 机器复制到我的

localhost
,但我收到一条错误消息:

ssh:连接到主机

127.0.0.1
端口
22
:连接被拒绝。

[user@localhost ceil]$ scp -p 2222 [email protected]:/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
但仍然遇到同样的错误。

linux vagrant scp
8个回答
64
投票

另一个选项是

cat
将文件保存到本地:

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

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


40
投票

您应该阅读

scp
的手册页。正确的语法是:

scp -P 2222 [email protected]:/home/vagrant/devstack/local.conf .

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


33
投票

使用获取IdentityFile和Port

vagrant ssh-config

scp -i IdentityFile_file -P Port [email protected]:/file_dir dist_dir
例如

scp -i /Users/xxxxx/tmp/vagrant/centos_6.5/.vagrant/machines/default/virtualbox/private_key -P 2200  [email protected]:/tmp/xxx .

11
投票

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

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

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


9
投票

像丹这样的另一个选项链接到:

   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)

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


5
投票

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


0
投票

可能不需要 scp 或 cat 等其他工具。弗雷德里克·亨利 (Frederick Henri) 在这里介绍了它。

本质上,

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


0
投票

单行:

scp -F =(cd $DIR_WITH_VAGRANTFILE && vagrant ssh-config) default:~/REMOTE_FILE .

它使用进程替换从

vagrant ssh-config
创建临时文件,并将其与
-F
ssh/scp 选项一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.