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 身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins Publish over ssh 身份验证失败,使用私钥
Packer 自定义映像构建失败并出现 ssh 身份验证错误