向Vagrant虚拟机复制文件时SCP被拒绝的问题求助
Vagrant虚拟机SCP传输被拒绝的原因及解决办法
嘿,刚好碰到过类似的问题,来给你捋捋~
问题原因
直接用系统默认的scp命令往Vagrant虚拟机传文件被拒绝,主要踩了这两个坑:
- SSH参数不匹配:Vagrant会给虚拟机分配非默认的SSH端口(比如常见的2222),而且用专属的私钥文件做身份认证,普通
scp没指定这些参数的话,根本连不上虚拟机的SSH服务,自然被拒绝。 - 用户身份不对:Ubuntu Xenial的Vagrant Box默认用户是
vagrant,如果你的scp命令没指定这个用户,大概率用了本地Mac的用户名,虚拟机里根本没有这个用户,认证直接失败。
解决办法
方案1:用vagrant-scp插件(你已经搞定的最优解)
这个插件是Vagrant官方生态里的文件传输工具,完美适配Vagrant的SSH配置,不用手动凑参数,省心到爆:
- 先安装插件:
vagrant plugin install vagrant-scp
- 上传本地文件到虚拟机,格式超简单:
vagrant scp /本地文件绝对路径/demo.zip :/虚拟机目标路径
比如传到虚拟机的用户目录:
vagrant scp ./demo.zip :/home/vagrant/
方案2:手动配置scp参数(不用装插件的方式)
如果不想加插件,可以从vagrant ssh-config的输出里抠出关键参数,拼到scp命令里:
- 先执行
vagrant ssh-config,拿到类似这样的日志:
Host default
HostName 127.0.0.1
User vagrant
Port 2222
IdentityFile /Users/你的用户名/.vagrant.d/insecure_private_key
...(其他无关配置可以忽略)
- 把这些参数加到
scp命令里:
scp -P 2222 -i /Users/你的用户名/.vagrant.d/insecure_private_key ./demo.zip vagrant@127.0.0.1:/home/vagrant/
这里-P对应端口,-i对应私钥文件路径,vagrant@127.0.0.1是正确的登录身份,这样就能顺利传输了。
内容的提问来源于stack exchange,提问作者shin
相关产品推荐
相关产品推荐

