我有一个非常奇怪的问题,尽管它的自我解释,但在使用rsync和wsl中的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).
我使用哪种vagrantfile都没关系。当我将vagrantfile放在WSL的/根中时,我可以使用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:TestDirvagrant-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设置。