Vagrant ssh 身份验证失败

Posted

技术标签:

【中文标题】Vagrant ssh 身份验证失败【英文标题】:Vagrant ssh authentication failure 【发布时间】:2014-05-20 07:32:32 【问题描述】:

ssh认证的问题:

==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Error: Connection timeout. Retrying...
    default: Error: Connection timeout. Retrying...
    default: Error: Connection timeout. Retrying...
    default: Error: Connection timeout. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...

我可以Ctrl+C 退出身份验证循环,然后手动成功 ssh。

我在guest box上执行了以下步骤:

All Users启用Remote Login

使用0700 权限创建了~/.ssh 目录。

使用0600 权限创建了~/.ssh/authorized_keys 文件。

已粘贴this public key 进入~/.ssh/authorized_keys

我也尝试过使用私有(仅主机)网络而不是公共(桥接)网络,在 Vagrantfile 中使用这一行:

config.vm.network "private_network", ip: "172.16.177.7"

我得到了相同的输出(Adapter 2: hostonly 除外),但随后无法手动 ssh。

我也试过config.vm.network "private_network", ip: "10.0.0.100"

我还尝试在 Vagrantfile 中设置 config.ssh.password。这确实输出了SSH auth method: password,但仍然没有进行身份验证。

我还尝试重建盒子并重新检查以上所有内容。

看起来像others have had success with this configuration,所以一定是我做错了什么。

我found this thread 并启用了 GUI,但这并没有帮助。

【问题讨论】:

【参考方案1】:

确保您的第一个网络接口是 NAT。另一个第二个网络接口可以是你在构建盒子时想要的任何东西。不要忘记 Vagrant 用户,正如 Google 线程中所讨论的那样。

祝你好运。

【讨论】:

【参考方案2】:

一般信息:默认为 ssh-connect,您可以简单地使用

用户:vagrant 密码:vagrant

https://www.vagrantup.com/docs/boxes/base.html#quot-vagrant-quot-user

首先,尝试:查看您的机器配置中的 vagrant insecure_private_key 是什么

$ vagrant ssh-config

例子:

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/konst/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

http://docs.vagrantup.com/v2/cli/ssh_config.html

第二,做: 将文件insecure_private_key 的内容更改为您个人系统的内容私钥

或使用: 将其添加到 Vagrantfile:

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
    config.ssh.private_key_path 是你的本地私钥 您的私钥必须对本地 ssh-agent 可用。您可以通过ssh-add -L 查询。如果未列出,请添加 ssh-add ~/.ssh/id_rsa 不要忘记将您的公钥添加到 Vagrant VM 上的~/.ssh/authorized_keys。您可以通过复制粘贴或使用ssh-copy-id 之类的工具来完成此操作(用户:root 密码:vagrant 端口:2222)ssh-copy-id '-p 2222 root@127.0.0.1'

如果还是不行试试这个:

    c:\Users\USERNAME\.vagrant.d\insecure_private_key中删除insecure_private_key文件

    运行vagrant up(vagrant会生成一个新的insecure_private_key文件)

在其他情况下,只需将forward_agent 设置为 Vagrantfile

Vagrant::Config.run do |config|
   config.ssh.forward_agent = true
end

有用:

配置git可能是git-scm.com

安装此程序并创建个人系统后私钥将在您的个人资料路径中:c:\users\USERNAME\.ssh\id_rsa.pub

PS:最后——建议你看看Ubuntu on Windows 10

【讨论】:

在我的情况下这是问题,因为config.ssh.private_key_path = "~/.ssh/id_rsa" 必须删除此行才能进行配置工作 所有这些都有效,但我还必须删除已知主机中的条目。我在移动位置和登录时遇到问题。 @shilovk +1 谢谢,谢谢,非常感谢。 “第二,做”成功了。再次,非常感谢你。 这个为我指明了正确的方向,就我而言,我所要做的就是删除 .vagrant/machines/default/virtualbox/private_key 文件,并在运行 vagrant up 后将文件替换为正确的 - 我会备份文件以防万一 用您的个人系统私钥的内容更改文件 insecure_private_key 的内容,对我来说已经足够了。非常感谢!【参考方案3】:

问题我在我配置的盒子上收到了 ssh 身份验证错误。原来的工作正常。

我的问题是我在.vagrant/machines/default/virtualbox/private_key 中丢失了一个私钥。我从原始盒子和 Viola 的相同相对位置复制了私钥!

【讨论】:

我要补充一点,作为任何优秀的开发人员,我们正在将 .vagrant 文件签入 git...因此,快速的 git checkout 文件可以节省一天的时间!跨度> 【参考方案4】:

对我来说,这是通过更改 vagrant home 目录中 .ssh 文件夹的权限来解决的(即“~vagrant/.ssh”)。我想我在为我的应用程序设置 ssh 密钥时弄乱了权限。

似乎 'authorized_keys' 文件必须是 'rw' 仅适用于 'vagrant' 用户所以 "chmod 600 authorized_keys";目录本身及其父目录也是如此:

所以:

chmod 600 authorized_keys
chmod 700 .
chmod 700 ..

只有在我所有这些权限恢复之后,vagrant ssh 才重新开始工作。

我认为这与 ssh 安全性有关。如果证书可以通过当前用户以外的任何方式访问,它会拒绝识别证书,因此 vagrant 尝试登录会被拒绝。

【讨论】:

我有时无法更改,只是运行 sudo chmod 600 authorized_keys 但它仍然保持不变。我认为这与它在 Windows 上共享有关。 如果目录在共享上,有时会发生这种情况,例如/vagrant/... 除了我的答案之外,我还想为这个答案投票。在我的另一台机器上,正是这个问题 - /home/vagrant/.ssh 目录的所有者错误。它是“root:root”,但必须是“vagrant:vagrant”【参考方案5】:

如果您试图强制您的虚拟机默认使用 root 用户进行 SSH,也会发生这种情况......

例如,在您的 Vagrantfile 中这样的配置可能会导致此故障:

config.ssh.username = 'root'
config.ssh.password = 'vagrant'
config.ssh.insert_key = 'true'

解决方案:注释掉这些行,然后重试!

【讨论】:

对我来说只设置 config.ssh.username = "vagrant" 和 config.ssh.password = "vagrant" 就可以了【参考方案6】:

以上都不适合我。不知何故,盒子在 vagrant user authorized_keys 文件中添加了错误的公钥。

如果你仍然可以使用 vagrant 密码(密码是 vagrant)在盒子上 ssh,即

ssh vagrant@localhost -p 2222

然后使用以下命令将https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub中的公钥内容复制到authorised_keys文件中

echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > .ssh/authorized_keys

完成后退出虚拟机并再次尝试 vagrant ssh。它现在应该可以工作了。

【讨论】:

在更新 authorized_keys 文件后运行 vagrant reload。 Vagrant 将自动检测不安全的密钥并为您重新生成它。之后应该工作。【参考方案7】:

如果您在 VagrantFile 中使用默认 SSH 设置,并且由于崩溃重新关联您的 VM 框后开始看到 SSH 身份验证错误,请尝试替换您的 vagrant 机器中的公钥。

出于安全原因,Vagrant 会在每次注销时替换与不安全私钥对关联的公钥。如果您没有正确关闭您的机器,公钥/私钥对可能会不同步,从而导致 SSH 身份验证错误。

要解决此问题,只需加载当前不安全的私钥,然后将公钥对复制到 VM 的 authorized_keys 文件中。

【讨论】:

【参考方案8】:

在客户机/VM 中运行以下命令:

wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R vagrant:vagrant ~/.ssh

然后做 vagrant stop。这将删除并重新生成您的私钥。

(这些步骤假设您已经在主文件夹下创建或已经拥有 ~/.ssh/ 和 ~/.ssh/authorized_keys 目录。)

【讨论】:

对我不起作用。带有 ubuntu 20.04 guest 的 Vagrant 版本 2.2.15。【参考方案9】:

我已经启动了机器,那么:

vagrant ssh-config

我得到了以下信息:

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/my-user-name/Documents/php-Projects/my-php-project/puphpet/files/dot/ssh/id_rsa
  IdentityFile /Users/my-user-name/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

那我跑了

cat ~/.ssh/id_rsa > /Users/my-user-name/Documents/PHP-Projects/my-php-project/puphpet/files/dot/ssh/id_rsa

机器从这里启动

El Capitan 10.11.1 Beta (15B38b) 虚拟盒子 5.0.8 r103449 流浪者 1.7.4

【讨论】:

【参考方案10】:

在此处的所有回复中,有很多值得尝试的好东西。为了完整起见,如果您

ssh vagrant@localhost -p 2222

正如@Bizmate 建议的那样,它失败了,请确保你有

AllowUsers vagrant

在您的访客/流浪机器的/etc/ssh/sshd_config 中。

【讨论】:

【参考方案11】:

我找到了一种方法来解决 Win 8.2 上的按键混乱问题,但我在这里提到的任何方法都没有成功。有趣的是,VirtualBox、Vagrant 和盒子的完全相同的组合可以在 Win 7 Ultimate 上运行而没有任何问题。

我通过在 Vagrantfile 中添加以下命令切换到密码验证:

config.ssh.password = "vagrant"
config.ssh.insert_key = false

请注意,我不确定这是唯一需要的更改,因为我已经做过:

    我生成了一个新的 RSA 密钥对并相应地更改了 authorized_keys 文件(全部在虚拟机中,请参阅上面和其他地方的建议)

    我将私钥复制到 Vagrantfile 所在的同一目录并添加了

     config.ssh.private_key_path = "./id_rsa"
    

但我相信这些变化是无关紧要的。我花了很多时间尝试,所以我没有因为明显的原因改变工作配置:)

【讨论】:

【参考方案12】:

我从 2015 年 5 月开始使用带有 Puphpet 设置的 Vagrant,并且遇到了这个问题。如果检测到不安全的密钥,生成的配置似乎没有处理 Vagrant 1.7.4(或者可能更早一点?)重新生成 ssh 密钥的行为。

我通过在“if File.file?(customKey)”子句中的 Puphpet 生成的 Vagrantfile(本地设置)中添加以下内容来解决它:

config.ssh.insert_key = false

Reference commit

【讨论】:

【参考方案13】:

这是我在运行 vagrant up 命令时为解决以下问题而遵循的所有正确步骤。

这些是我遵循的步骤

    创建一个文件夹。例如 F:\projects 在 git bash 中打开此文件夹并运行此命令 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"(输入有效的电子邮件地址) 然后在项目文件夹的两个单独文件中生成密钥对。例如 project(私钥文件)、project.pub(公钥文件) 转到此位置 C:\Users\acer.vagrant.d 并找到文件 insecure_private_key 获取文件的备份并复制新创建的私钥的内容并将其粘贴到 insecure_private_key 文件中。然后复制 insecure_private_key 并将其也粘贴到此位置。 现在在你的项目位置流浪。生成上述问题类型 vagrant ssh 后,输入用户名、密码。 (默认用户名和密码设置为 vagrant) 进入这个位置 cd /home/vagrant/.ssh 并输入 mv authorized_keys authorized_keys_bk 然后键入 ls -al 并键入 vi authorized_keys 以打开 authorized_keys 文件 vi 编辑器。 从记事本++ (project.pub) 打开生成的公钥并复制内容 然后在 git bash 上按 i 以在 vi 编辑器上启用插入模式,然后右键单击并粘贴。按退出后退出插入模式 :哇!保存文件并输入 ls -al 然后权限设置如下,无需更改 drwx-----。 2 vagrant vagrant 4096 2 月 13 日 15:33 。 drwx-----。 4 vagrant vagrant 4096 二月 13 14:04 .. -rw--------。 1 vagrant vagrant 743 Feb 13 14:26 authorized_keys -rw--------。 1 根根 409 Feb 13 13:57 authorized_keys_bk -rw--------。 1 vagrant vagrant 409 Jan 2 23:09 authorized_keys_originial 否则输入 chmod 600 authorized_keys 并输入此命令 chown vagrant:vagrant authorized_keys 最后运行 vagrant halt 并再次 vagrant up。

************************这对我来说很好用********************** **************

【讨论】:

【参考方案14】:

首先您应该删除自动生成的 insecure_private_key 文件,然后通过键入重新生成此文件

vagrant ssh-config

然后

vagrant halt
vagrant up

它应该可以工作

【讨论】:

我试过了,但仍然出现错误,这是因为我在里面使用 Ubuntu Virtual Box VM,我正在尝试 vagrant ? #vagrant up 使用 'virtualbox' 提供程序启动机器 'default'... ==> 默认值:清除任何以前设置的转发端口...==> 默认值:清除任何以前设置的网络接口... ==> 默认值:根据配置准备网络接口... 默认值:适配器 1:nat ==> 默认值:转发端口...默认值:22(访客)=> 2222(主机)(适配器 1)= => 默认值:正在启动 VM... ==> 默认值:等待机器启动。这可能需要几分钟... 默认:SSH 地址:127.0.0.1:2222 默认:SSH 用户名:vagrant 默认:SSH 身份验证方法:私钥【参考方案15】:

也无法超越:

默认:SSH 认证方式:私钥

当我使用 VirtualBox GUI 时,它告诉我操作系统处理器不匹配。

为了让 vagrant 更进一步,在 Bios 设置中我不得不反直觉:

禁用:虚拟化

启用:VT-X

尝试在您的 BIOS 中切换这些设置。

【讨论】:

【参考方案16】:

这发生在我身上好几次了,我解决它的方法是:

    检查并确保您的 Vagrantfile 具有正确的私钥路径:

    config.ssh.private_key_path = "/home/razvan/.ssh/id_rsa"

    在 linux 终端中执行 > vagrant ssh 命令

    在你的流浪机器上去

    cd /home/vagrant/.ssh

并检查 authorized_keys 文件中的 ssh 密钥是否与您在本地计算机上的 ~/.ssh/id_rsa.pub 中的相同。如果没有将 vagrant 授权密钥中的那个替换为 ~/.ssh/id_rsa.pub 中的 本地计算机 上的那个。

    重新加载流浪者:

    流浪者重新加载

希望这对其他人有所帮助。干杯!

【讨论】:

我没有 ~/.ssh 文件夹,我该怎么办?? @AshishKarpe 使用 700 权限创建它,并在内部创建一个具有 600 权限的authorized_keys 文件。【参考方案17】:

仅针对那些像我这样的白痴,或者他们的流浪机器发生了奇怪的事情的人。当您更改 vagrant 用户主目录的权限时(有意或无意),也会发生此错误。

您可以改为使用密码 ('vagrant') 登录(如其他帖子中所述),然后运行以下命令来修复权限。

sudo chown -R vagrant:vagrant /home/vagrant

那么你应该可以不用输入密码重新登录了。

TL;DR:您的 vagrant home 文件夹的权限错误。

【讨论】:

【参考方案18】:

根据我的经验,这对于新的 vagrant 机器来说是一个令人惊讶的常见问题。到目前为止,最简单的解决方法是在客户端手动创建所需的 ssh 密钥,然后在主机上使用私钥,而不是更改配置本身。

    登录vagrant机器:vagrant ssh,使用默认密码vagrant。 创建 ssh 密钥:例如,ssh-keygen -t rsa -b 4096 -C "vagrant" (as adviced by GitHub's relevant guide)。 重命名公钥文件(默认为 id_rsa.pub),覆盖旧的:mv .ssh/id_rsa.pub .ssh/authorized_keys。 在需要时重新加载 ssh 服务:sudo service ssh reload。 将私钥文件(默认为 id_rsa)复制到主机:例如,使用 cat 和剪贴板的完美组合,cat .ssh/id_rsa,绘制和复制(必须存在更好的方法,去发明一个!)。 从流浪机器注销:logout。 通过查看 vagrant 的配置找到当前使用的私钥:vagrant ssh-config(查找实例 ÌdentityFile "/[...]/private_key"。 用您在主机上创建的私钥替换当前私钥:例如,nano /[...]/private_key 并从剪贴板粘贴,如果其他方法都失败了。 (注意,但是,如果您的 private_key 不是特定于项目的,而是由多个 vagrant 机器共享,您最好自己配置路径,以免破坏其他正常工作的机器!更改路径就像在 Vagrantfile 中添加一行 config.ssh.private_key_path = "path/to/private_key" 一样简单。)此外,如果您使用的是 PuPHPet 生成的机器,您可以将您的私钥存储到文件 puphpet/files/dot/ssh/id_rsa 中,它将被添加到 Vagrantfile 的 ssh 配置中自动。 测试设置:vagrant ssh 现在应该可以工作了。

如果是这样,恭喜你自己,logout,如果需要,请运行vagrant provision,继续手头的有意义的任务。

如果您仍然遇到问题,可以在 ssh 命令中添加详细标志以方便调试。您可以在双破折号后传递它(或任何其他选项)。例如,键入vagrant ssh -- -v。随意添加尽可能多的 v,每个都会为您提供更多信息。

【讨论】:

这个答案对我有帮助。只是为了分享我的经验:不知何故(可能在 Capistrano 的安装期间,但尚未确认)我的授权密钥文件已在我的来宾 VM 上被删除。使用这些步骤重新创建它是可行的,我现在可以在没有密码提示的情况下通过 ssh 登录。谢谢。 从主机上删除两个密钥(公钥/私钥)后,我能够通过此过程重做和解决 使用 Git 可以更快地传输文件内容。 在我尝试过其他任何方法后,这个对我有用,但失败了..非常感谢! 这对我有用。我唯一不同的是使用ssh vagrant@10.0.0.0 -p 22 (password: vagrant) 登录VM,因为vagrant ssh 不适合我。 10.0.0.0 是我在 vagrantfile 中设置的私有 IP 地址。【参考方案19】:

简单:

homestead destroy
homestead up

编辑(不像最初想象的那么简单):

问题是新版本的宅基地使用php7.0 和其他一些东西。为避免这种混乱,请确保在Homestead.yml 中设置verison

version: "0"

【讨论】:

【参考方案20】:

如果您在 vagrant 1.8.5 上遇到此问题,请查看 github 上的此线程:

https://github.com/mitchellh/vagrant/issues/7610

基本上是权限问题造成的,解决方法只是

vagrant ssh 
password: vagrant 
chmod 0600 ~/.ssh/authorized_keys
exit

然后

vagrant reload 

仅供参考:这个问题只影响 CentOS,Ubuntu 工作正常。

【讨论】:

假设我有 5 台机器用于一个 vagrant 文件。每次我重新运行时,我都需要为每台机器执行此操作。我在那里使用 centos 为给定的 vagrant 设置永久修复此问题? 只需将 vagrant 升级到 1.8.6 版本,就可以在 1.8.5 出现错误时使用【参考方案21】:

我通过在 Windows 7 CMD 上运行命令解决了这个问题,这里给出了这个帖子的链接,

https://github.com/mitchellh/vagrant/issues/6744

Some commands that will reinitialize various network states:
Reset WINSOCK entries to installation defaults : netsh winsock reset catalog
Reset TCP/IP stack to installation defaults : netsh int ip reset reset.log
Flush DNS resolver cache : ipconfig /flushdns
Renew DNS client registration and refresh DHCP leases : ipconfig /registerdns
Flush routing table : route /f

【讨论】:

【参考方案22】:

Mac 解决方案:

    为 vagrant 私钥添加了本地 ssh id_rsa 密钥

    vi /Users//.vagrant/machines/default/virtualbox/private_key

    /Users//.ssh/id_rsa

    已将公钥 /Users//.ssh/id_rsa.pub 复制到 vagrant box authorized_keys

ssh vagrant@localhost -p 2222(密码:vagrant) ls -la cd .ssh

    chmod 0600 ~/.ssh/authorized_keys

    vagrant reload

问题已解决。

感谢

【讨论】:

【参考方案23】:

我通过以下方式解决了这个问题。 1. 使用 Git Bash 创建新的 SSH 密钥

$ ssh-keygen -t rsa -b 4096 -C "vagrant@localhost"
# Creates a new ssh key, using the provided email as a label
Generating public/private rsa key pair.

    当系统提示您“输入保存密钥的文件”时,按 Enter。这接受默认文件位置。

    输入保存密钥的文件(/Users/[you]/.ssh/id_rsa):[按回车键]

    在提示符下,输入安全密码。如果不需要密码,可以留空并按 Enter。

    输入保存密钥的文件(/Users/[you]/.ssh/id_rsa):[按回车键]

    要连接到您的 Vagrant VM,请输入以下命令

    ssh vagrant@localhost -p 2222

当您收到以下消息时,键入“是”并按 Enter。

The authenticity of host 'github.com (192.30.252.1)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?

    现在建立 SSH 连接类型:$ vagrant ssh

    将主机公钥复制到 Vagrant VM 中的 authorized_keys 文件中。为此,请转到“Users/[you]/.ssh”文件夹并将主机中 id_rsa.pub 文件中的内容复制到 Vagrant VM 中的“~/.ssh/authorized_keys”文件中。

    李> 在 Vagrant VM 中更改 SSH 文件夹和 authorized_keys 文件的权限 使用 : $ vagrant reload 重新启动 vagrant

【讨论】:

【参考方案24】:

这可能是列表中的最后一个答案,但这对我有用,我在任何地方都没有找到这个答案,经过 2 天的研究,我自己找到了它,所以如果没有其他方法对你有用,你最好试试这个,直到现在。

就我而言,问题来自我的 VirtualBox。我不知道出于什么原因禁用了某个选项,应该启用它。

正如您在图片中看到的那样,我的 VirtualBox 存在一些网络问题,为了解决这个问题我必须做的是选择我的机器,按设置,网络选项卡,然后确保已选择连接电缆选项。在我的情况下,这个选项没有被选中,我在这一步失败了:

default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key

首先我认为该端口已经在使用中,然后我重新安装了 Vagrant,我还尝试了其他方法,但没有一个对我有用。

【讨论】:

【参考方案25】:

过去几天我一直在用重新包装的底座盒来解决这个问题。 (Mac OS X,El Capitan)

按照@Radek 的程序,我在源代码框中执行了“vagrant ssh-config”并得到:

...
/Users/Shared/dev/<source-box-name>/.vagrant/machines/default/virtualbox/private_key
...

在新副本上,该命令给了我:

...
IdentityFile /Users/<username>/.vagrant.d/insecure_private_key
...

所以,我只是在新副本中添加了这一行:

...
config.ssh.private_key_path = "/Users/Shared/dev/<source-box-name>/.vagrant/machines/default/virtualbox/private_key"
...

不完美,但我可以继续我的生活。

【讨论】:

【参考方案26】:

另一个简单的解决方案,在 Windows 中,转到文件 Homestead/Vagrantfile 并添加这些行以使用用户名/密码而不是私钥进行连接:

config.ssh.username = "vagrant"  
config.ssh.password = "vagrant"  
config.ssh.insert_key = false 

因此,文件的最后一部分将如下所示:

if File.exists? homesteadYamlPath then
    settings = YAML::load(File.read(homesteadYamlPath))
elsif File.exists? homesteadJsonPath then
    settings = JSON.parse(File.read(homesteadJsonPath))
end

config.ssh.username = "vagrant"  
config.ssh.password = "vagrant"  
config.ssh.insert_key = false 

Homestead.configure(config, settings)

if File.exists? afterScriptPath then
    config.vm.provision "shell", path: afterScriptPath, privileged: false
end

希望对您有所帮助..

【讨论】:

【参考方案27】:

1。在主机中找到私钥:

vagrant ssh-config
#

输出:

Host default
  ...
  Port 2222
  ...
  IdentityFile /home/me/.vagrant.d/[...]/virtualbox/vagrant_private_key
  ...

2。将私钥路径和端口号存储在变量中:

将这两个命令与上面的输出一起使用:

pk="/home/me/.vagrant.d/.../virtualbox/vagrant_private_key"
port=2222
#

3。生成公钥并将其上传到客户机:

复制/粘贴,无需更改:

ssh-keygen -y -f $pk > authorized_keys
scp -P $port authorized_keys vagrant@localhost:~/.ssh/
vagrant ssh -c "chmod 600 ~/.ssh/authorized_keys"
rm authorized_keys
#

【讨论】:

我多次遇到过所描述的问题,通常是在打包然后恢复 Vagrant 盒子之后。对我有用的是添加以下配置以指示 Vagrant 将其公钥插入 VM:config.ssh.username = "vagrant"; config.ssh.password = "vagrant"; config.ssh.insert_key = true 但是这次上述配置什么也没做。我真的不知道为什么,试图调试为什么没有运气没有插入密钥。所以我回退到你的解决方案,瞧!它有效!【参考方案28】:

由于卡住并超时而无法运行 vagrant?我最近遇到了“笔记​​本电脑进水事件”,不得不迁移到新的(顺便说一下在 MAC 上)。除了使用 vagrant 的项目,我成功启动并运行了所有项目。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 8000 (guest) => 8877 (host) (adapter 1)
    default: 8001 (guest) => 8878 (host) (adapter 1)
    default: 8080 (guest) => 7777 (host) (adapter 1)
    default: 5432 (guest) => 2345 (host) (adapter 1)
    default: 5000 (guest) => 8855 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...

它无法验证,一次又一次地重试,最终放弃。


这就是我如何通过 3 个步骤将其恢复原状:

1 - 找到 Vagrant 使用的IdentityFile

$ vagrant ssh-config

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/ned/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

2 - 检查IdentityFile中的公钥:

$ ssh-keygen -y -f <path-to-insecure_private_key>

它会输出如下内容:

ssh-rsa AAAAB3Nyc2EAAA...9gE98OHlnVYCzRdK8jlqm8hQ==

3 - 使用密码vagrant 登录 Vagrant guest:

ssh -p 2222 -o UserKnownHostsFile=/dev/null vagrant@127.0.0.1
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.
RSA key fingerprint is dc:48:73:c3:18:e4:9d:34:a2:7d:4b:20:6a:e7:3d:3e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
vagrant@127.0.0.1's password: vagrant
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)
...

注意: 如果 vagrant guest 被配置为不允许密码验证,你需要打开 VBox 的 GUI,双击 guest name,以vagrant/vagrant 登录,然后sudo -s 并编辑/etc/ssh/sshd_config 和查找PasswordAuthentication no 行(通常在文件末尾),将no 替换为yes 并重新启动sshd(即systemctl reload sshd/etc/init.d/sshd restart)。

4 - 将公钥添加到 /home/vagrant/authorized_keys 文件中。

$ echo "ssh-rsa AA2EAAA...9gEdK8jlqm8hQ== vagrant" > /home/vagrant/.ssh/authorized_keys

5 - 退出 (CTRL+d) 并停止 Vagrant 来宾,然后将其重新启动。

重要如果您使用任何配置工具(即 Ansible 等)禁用在重新启动您的客人之前,因为 Vagrant 会认为您的客人未配置,因为使用了不安全的私有钥匙。它将重新安装密钥,然后运行您的配置器!

$ vagrant halt
$ vagrant up

希望你现在能举起双臂......

我从 Ned Batchelders article 那里得到了这个,稍作修改 - Ned 你是冠军!

【讨论】:

您先生是个天才,或者 Ned Batchelders 是。不管怎样,它解决了我的问题! 我认为这也为我修复了它,但是,vagrant destroy 后跟 vagrant up 未能保留这些更改。 MacOS Catalina/Big Sur 给我带来了很多问题,但最终还是卸载了 VirtualBox/Vagrant,确保删除了剩余的文件夹,然后又一次全新安装让我重新启动并运行。对于 Catalina 及更高版本,我必须从这个 Vagrant wiki 进行内核扩展 (Kext) 更新:google.com/url?q=https://www.virtualbox.org/wiki/…【参考方案29】:

如果您使用的是windows,并且意外出现此问题,请在配置中尝试以下代码。

config.ssh.username = 'vagrant'
config.ssh.password = 'vagrant'
config.ssh.insert_key = 'true'

这基本上使用了默认的vagrant配置。

【讨论】:

【参考方案30】:

不确定您的情况是否与我的情况相同。 在我的情况下,vagrant ssh 密钥身份验证失败并要求输入密码。 我在~/.ssh/config(文件顶部)中找到了我的旧设置。

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

删除后,密钥身份验证开始工作。不再询问密码。

【讨论】:

以上是关于Vagrant ssh 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

markdown SSH太多身份验证失败

Jenkins Publish over ssh 身份验证失败,使用私钥

Packer 自定义映像构建失败并出现 ssh 身份验证错误

连接到 gitlab 时使用 ssh 面临身份验证失败

通过 SSH 隧道在 PostgreSQL 上进行身份验证失败

GitLab SSH要求输入密码(未知密码)身份验证失败