当我在 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 密钥,但出了问题。知道如何解决这个问题吗?
您只需在 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
我解决了错误:
[email protected]: Permission denied (publickey)
编辑我的 Vagrantfile。
Vagrant 似乎不喜欢这个配置:
config.vm.synced_folder "app", "/home/vagrant"
编辑为:
config.vm.synced_folder "app", "/vagrant"
@rekinz提供的解决方案有效,但我想添加一些进一步的解释。
set VAGRANT_PREFER_SYSTEM_BIN=0
Vagrant 将默认使用 Windows 上系统提供的 SSH。此环境变量还可用于禁用该行为,通过将其设置为 0 来强制 Vagrant 使用嵌入式 SSH 可执行文件。
我还使用 Vagrant stop 来清理以前的安装。然后,当我再次配置它时,我遇到了与OP相同的错误。
我认为 Windows 提供的 SSH 不起作用,使用此
VAGRANT_PREFER_SYSTEM_BIN
已重置相同的情况。
在 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
问题可能是 sshClient windows 功能拦截了操作,尝试以管理员身份打开 powershell 并运行以下命令:
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
如果还不能解决,请再次安装 sshclient
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
您还可以检查文件的权限
.vagrant/machines/default/virtualbox/private_key
在我的例子中,该文件的权限适用于未知用户(可能来自以前的操作系统安装) - 将此文件的权限设置为我自己解决了问题
当我指向 private_key 时它对我有用(首先检查它的权限)
ssh -i ${vagrant_home}/.vagrant/machines/default/virtualbox/private_key [email protected] -p 2222
[email protected]:权限被拒绝(publickey、gssapi-keyex、gssapi-with-mic)。
我在 Windows 10 操作系统上也遇到了同样的问题,
我还安装了 gitbash,所以我没有使用 Windows 终端,而是使用 git bash 并可以访问
有一个已知问题,我之前曾在博客中讨论过,涉及 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
。