Vagrant WSL rsync和ssh权限错误

时间:2017-09-11 07:49:52

标签: ssh vagrant rsync vagrant-windows

我有一个非常奇怪的问题,尽管它是自我解释的,但在WSL中使用rsync和vagrant ssh时我仍然遇到权限问题。

我在Windows和WSL中安装了vagrant版本1.9.8。我导出了以下环境变量:

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
export VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH="/mnt/c/Vagrant"

当我运行vagrant up时,它会在virtualbox中成功创建一个VM。但中途我得到以下错误:

==> salt: Rsyncing folder: /mnt/c/Vagrant/ => /vagrant
There was an error when attempting to rsync a synced folder.
Please inspect the error message below for more info.

Host path: /mnt/c/Vagrant/
Guest path: /vagrant
Command: "rsync" "--verbose" "--archive" "--delete" "-z" "--copy-links" "--no-owner" "--no-group" "--rsync-path" "sudo rsync" "-e" "ssh -p 2222 -o LogLevel=FATAL  -o ControlMaster=auto -o ControlPath=/tmp/ssh.216 -o ControlPersist=10m  -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i 
'/mnt/c/Vagrant/.vagrant.d/insecure_private_key'" "--exclude" ".vagrant/" 
"/mnt/c/Vagrant/" "vagrant@127.0.0.1:/vagrant"
Error: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]

当我使用vagrant ssh salt时,我收到错误:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

我使用什么样的Vagrant文​​件并不重要。当我将Vagrantfile放在WSL的/ root中时,我可以使用vagrant ssh,但我仍然会收到rsync的错误。

这很奇怪,因为Vagrant的WSL文档说的如下:

Other useful WSL related environment variables:

VAGRANT_WSL_WINDOWS_ACCESS_USER - Override current Windows username
VAGRANT_WSL_DISABLE_VAGRANT_HOME - Do not modify the VAGRANT_HOME variable
VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH - Custom Windows system home path

If a Vagrant project directory is not within the user's home directory on the Windows system, certain actions that include permission checks may fail (like vagrant ssh). 
When accessing Vagrant projects outside the WSL Vagrant will skip these permission checks when the project path is within the path defined in the VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH environment variable. 
For example, if a user wants to run a Vagrant project from the WSL that is located at C:\TestDir\vagrant-project:

有谁知道如何解决这个问题?或者有没有人亲身经历过这个问题?我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

对于对此感兴趣的人,这是解决方案(至少对我来说是解决方案)。

我删除了VAGRANT_WSL_WINDOWS_ACCESS_USER_HOME_PATH="/mnt/c/Vagrant"环境变量。我注意到未设置VAGRANT_HOME环境变量。当您将其设置为默认位置(~/.vagrant.d)时,它可以工作和操作文件权限,这是Windows文件无法做到的。

所以使用这个:

$ export VAGRANT_HOME="/home/<user>/.vagrant.d"

更改此密钥后,rsync问题消失了,但ssh权限错误仍然存​​在。这是因为Vagrant默认插入一个新的ssh密钥,并将其放在Vagrantfile根目录的.vagrant文件夹中。因此,请确保将其放入Vagrantfile中:

config.ssh.insert_key = false

此问题的主要原因是Vagrant对ssh密钥执行权限检查。由于Vagrant会将新生成的ssh密钥放在与Vagrantfile相同的文件夹中,因此会因权限检查而失败。 Windows路径上的权限检查将失败。通过设置config.ssh.insert_key = false,它将保留默认的不安全密钥,该密钥位于VAGRANT_HOME文件夹中。

我也遇到了.ssh文件夹中配置文件的问题。对于我的git ssh配置,我使用了RSAAuthentication yes选项。因此rsync也可能失败。

我希望这也能帮助那些正在努力争取WSL的人。我现在在Windows上的WSL中​​有一个完全正常的Vagrant设置。