Vagrant 拒绝许可

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

当我在 Windows 10 笔记本电脑上的项目中执行

vagrant ssh
时,出现此错误:

[email protected]: Permission denied (publickey)
.

当我删除

.vagrant/machines/default/virtualbox/private_key
并再次执行
vagrant ssh
时,我就可以访问虚拟机了。

但是当我退出虚拟机并执行“vagrant shutdown”时,我收到此错误:


==> default: Attempting graceful shutdown of VM...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
translation missing: en.vagrant_ps.errors.powershell_error.powershell_error

在我看来,它试图添加我的 SSH 密钥,但出了问题。知道如何解决这个问题吗?

ssh vagrant
10个回答
32
投票

您只需在 cmd 中运行以下命令即可:

设置 VAGRANT_PREFER_SYSTEM_BIN=0

流浪者 ssh

windows 10下使用vagrant 2.1.5

成功测试

您还可以看到:https://www.vagrantup.com/docs/other/environmental-variables.html#vagrant_prefer_system_bin


7
投票

我解决了错误:

[email protected]: Permission denied (publickey)

编辑我的 Vagrantfile。

Vagrant 似乎不喜欢这个配置:

config.vm.synced_folder "app", "/home/vagrant"

编辑为:

config.vm.synced_folder "app", "/vagrant"

3
投票

@rekinz提供的解决方案有效,但我想添加一些进一步的解释。

set VAGRANT_PREFER_SYSTEM_BIN=0

Vagrant 将默认使用 Windows 上系统提供的 SSH。此环境变量还可用于禁用该行为,通过将其设置为 0 来强制 Vagrant 使用嵌入式 SSH 可执行文件。

我还使用 Vagrant stop 来清理以前的安装。然后,当我再次配置它时,我遇到了与OP相同的错误。

我认为 Windows 提供的 SSH 不起作用,使用此

VAGRANT_PREFER_SYSTEM_BIN
已重置相同的情况。


2
投票

Windows 10 上,当我们尝试使用

登录虚拟机节点(例如 node01)时
vagrant ssh node01

如果出现错误

[email protected]: Permission denied (publickey)

尝试按照以下步骤操作:

Power Shell 中,设置环境变量 VAGRANT_PREFER_SYSTEM_BIN 以优先使用本地 ssh 而不是打包的 ssh(了解有关该变量的更多信息此处

$Env:VAGRANT_PREFER_SYSTEM_BIN += 0

根据 Vagrant Github 中列出的问题: [email protected]:权限被拒绝(publickey、gssapi-keyex、gssapi-with-mic)。

完成后,对之前无法访问的虚拟机执行 vagrant ssh


1
投票

问题可能是 sshClient windows 功能拦截了操作,尝试以管理员身份打开 powershell 并运行以下命令:

Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

如果还不能解决,请再次安装 sshclient

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

1
投票

您还可以检查文件的权限

.vagrant/machines/default/virtualbox/private_key

在我的例子中,该文件的权限适用于未知用户(可能来自以前的操作系统安装) - 将此文件的权限设置为我自己解决了问题


1
投票

当我指向 private_key 时它对我有用(首先检查它的权限)

ssh -i ${vagrant_home}/.vagrant/machines/default/virtualbox/private_key [email protected] -p 2222

1
投票

[email protected]:权限被拒绝(publickey、gssapi-keyex、gssapi-with-mic)。

我在 Windows 10 操作系统上也遇到了同样的问题,

我还安装了 gitbash,所以我没有使用 Windows 终端,而是使用 git bash 并可以访问


0
投票

我在 Windows 10 上遇到此错误。

我能够通过删除 Windows 10 内置 SSH 客户端来解决该问题:

前往

"Settings => Apps => Apps and Features => Optional Features".

然后搜索OpenSSH Client然后卸载它。


0
投票

有一个已知问题,我之前曾在博客中讨论过,涉及 Vagrant 与安装了系统 (Windows) OpenSSH 客户端的 Windows 最新版本的交互。

正如其他人所建议的,你可以要求 Vagrant 使用它自己内部提供的 SSH 客户端 - 但我发现这有问题(特别是它对

Ctrl+C
的处理)。 Windows 自己的 SSH 客户端只会抱怨 Vagrant 生成的 SSH 私钥的所有权开放。

以下 PowerShell(我在 Vagrant 支持的代码库的根目录中保留为

fix_ssh.ps1
)解决了该问题。修复权限的 PS 方法归功于 https://superuser.com/a/1329702

Write-Host "Trying to retrieve Vagrant SSH details ... (this may take a moment)"

$VagrantSshKey = "$(vagrant ssh-config | Select-String -Pattern "^  IdentityFile ")".Split(" ")[3]
If (!$VagrantSshKey.EndsWith("private_key")) {
 Write-Host "Could not determine Vagrant private SSH Key location.  Unable to proceed."
 Exit 1
}

Write-Host "Key location is: $VagrantSshKey"
Write-Host "Fixing key permissions..."

# Remove Inheritance:
icacls $VagrantSshKey /c /t /Inheritance:d

# Set Ownership to Owner:
icacls $VagrantSshKey /c /t /Grant:r ${env:UserName}:F

# Remove All Users, except for Owner:
icacls $VagrantSshKey /c /t /Remove:g Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users

# Verify:
icacls $VagrantSshKey

Write-Host "Fixed SSH private key permissions."

这(或多或少)相当于 Unix 下的

chmod 600

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