Vagrant WSL rsync 和 ssh 权限错误

Vagrant WSL rsync and ssh permission error

我有一个非常奇怪的问题,虽然它不言自明,但在 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 中创建了一个虚拟机。但是中途我收到以下错误:

==> 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).

不管我用什么样的Vagrantfile。当我将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:

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

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

我删除了 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 设置