【问题标题】:Vagrant ssh authentication failureVagrant ssh 身份验证失败
【发布时间】: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,但这并没有帮助。

【问题讨论】:

    标签: ssh vagrant virtualbox private-key vagrantfile


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

      如果还是不行试试这个:

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

      2. 运行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
            

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

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

            2. 我将私钥复制到 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 命令时为解决以下问题而遵循的所有正确步骤。

                这些是我遵循的步骤

                1. 创建一个文件夹。例如 F:\projects
                2. 在 git bash 中打开此文件夹并运行此命令 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"(输入有效的电子邮件地址)
                3. 然后在项目文件夹的两个单独文件中生成密钥对。例如 project(私钥文件)、project.pub(公钥文件)
                4. 转到此位置 C:\Users\acer.vagrant.d 并找到文件 insecure_private_key
                5. 获取文件的备份并复制新创建的私钥的内容并将其粘贴到 insecure_private_key 文件中。然后复制 insecure_private_key 并将其也粘贴到此位置。
                6. 现在在你的项目位置流浪。生成上述问题类型 vagrant ssh 后,输入用户名、密码。 (默认用户名和密码设置为 vagrant)
                7. 进入这个位置 cd /home/vagrant/.ssh 并输入 mv authorized_keys authorized_keys_bk
                8. 然后键入 ls -al 并键入 vi authorized_keys 以打开 authorized_keys 文件 vi 编辑器。
                9. 从记事本++ (project.pub) 打开生成的公钥并复制内容 然后在 git bash 上按 i 以在 vi 编辑器上启用插入模式,然后右键单击并粘贴。按退出后退出插入模式
                10. :哇!保存文件并输入 ls -al
                11. 然后权限设置如下,无需更改 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
                12. 最后运行 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】:

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

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

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

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

                    3. 在你的流浪机器上去

                      cd /home/vagrant/.ssh

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

                    1. 重新加载流浪者:

                      流浪者重新加载

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

                    【讨论】:

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

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

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

                    sudo chown -R vagrant:vagrant /home/vagrant

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

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

                    【讨论】:

                      【解决方案18】:

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

                      1. 登录vagrant机器:vagrant ssh,使用默认密码vagrant
                      2. 创建 ssh 密钥:例如,ssh-keygen -t rsa -b 4096 -C "vagrant" (as adviced by GitHub's relevant guide)。
                      3. 重命名公钥文件(默认为 id_rsa.pub),覆盖旧的:mv .ssh/id_rsa.pub .ssh/authorized_keys
                      4. 在需要时重新加载 ssh 服务:sudo service ssh reload
                      5. 将私钥文件(默认为 id_rsa)复制到主机:例如,使用 cat 和剪贴板的完美组合,cat .ssh/id_rsa,绘制和复制(必须存在更好的方法,去发明一个!)。
                      6. 从流浪机器注销:logout
                      7. 通过查看 vagrant 的配置找到当前使用的私钥:vagrant ssh-config(查找实例 ÌdentityFile "/[...]/private_key"。
                      8. 用您在主机上创建的私钥替换当前私钥:例如,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 配置中自动。
                      9. 测试设置: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 解决方案:

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

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

                            /Users//.ssh/id_rsa

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

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

                          1. chmod 0600 ~/.ssh/authorized_keys

                          2. 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.
                            
                            1. 当系统提示您“输入保存密钥的文件”时,按 Enter。这接受默认文件位置。

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

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

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

                            3. 要连接到您的 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)?
                            
                            1. 现在建立 SSH 连接类型:$ vagrant ssh

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

                              李>
                            3. 在 Vagrant VM 中更改 SSH 文件夹和 authorized_keys 文件的权限
                            4. 使用 : $ 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
                                      

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

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 2015-11-15
                                        • 1970-01-01
                                        • 2017-01-03
                                        • 2015-11-25
                                        • 1970-01-01
                                        • 2015-02-01
                                        • 2018-07-12
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多