【问题标题】:Vagrant ssh promtps for passwordVagrant ssh 提示输入密码
【发布时间】:2016-04-08 12:40:06
【问题描述】:

vagrant ssh 有一个奇怪的问题。类似的问题,如Vagrant asks for password after SSH key update(vagrant & ssh) require password、或Vagrant ssh authentication failure,对我没有帮助。

所以,情节。

我有一台运行 Ubuntu 14.04.3 的虚拟机。所有设置都是根据这篇文章进行的:https://blog.engineyard.com/2014/building-a-vagrant-box

注意:我可以使用带有 vagrant 的 insecure_private_key(转换为 *.ppk)的 Putty SSH 到此虚拟机,该密钥位于“C:/Users/Gino/.vagrant.d/insecure_private_key。密码未提示。

然后我打包这个虚拟机,用这个包初始化 vagrant 并运行vagrant up。我收到“Warning: Authentication failure. Retrying...”错误。但是我可以vagrant ssh 到这台机器,但它要求我输入密码。如果我尝试使用 Putty 和必要的密钥(如第一段)向它 ssh ,它也会要求我输入密码。

vagrant halted 这台机器,在 VirtualBox VM 的列表中找到它并手动运行它。之后,我尝试使用具有相同密钥的 Putty ssh 到这台机器并成功 - 我可以在没有任何密码的情况下登录。

vagrant ssh-config 的结果,如果需要:

h:\VagrantBoxes\main-server32>vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile "C:/Users/Gino/.vagrant.d/insecure_private_key"
  IdentitiesOnly yes
  LogLevel FATAL

我的Vagrantfile(它是自动生成的,几乎没有,只添加了来自 cmets 的建议行):

Vagrant.configure(2) do |config|
  config.vm.box = "vagrant-main-server32"

  config.ssh.insert_key = false
end

那么这里的奥秘是什么?为什么 ssh 使用密钥在没有 vagrant up 的情况下工作并且失败并提示输入密码?

注意。另一个有趣的事情:它仍然无法在期间进行身份验证 vagrant up。但是如果在错误“身份验证失败”的时候 出现我通过virtualbox登录vm,也登录成功 带有vagrant up 的窗口。然后vagrant ssh 工作。

【问题讨论】:

  • 您使用的是哪个版本的 vagrant ?你能在你的 Vagrantfile 中设置config.ssh.insert_key = false
  • @FrédéricHenri,它的 1.8.1。我会尽快尝试。
  • @FrédéricHenri,不,选项没有任何变化。
  • 啊!曾经有过这样的错误..所以让我们尝试 1. 删除 .vagrant/machines/default/virtualbox/ 下 vagrant 生成的 private_key 文件(不是 .vagrant.d 而是本地 .vagrant) 2. 将密钥文件重新下载到虚拟机所以 ssh 进入虚拟机并执行 `curl raw.githubusercontent.com/mitchellh/vagrant/master/keys/… > ~/.ssh/authorized_keys 3. 保持 config.ssh.insert_key = false 和 vagrant 再次启动,ssh 有望工作
  • 其实我在.vagrant/machines/default/virtualbox/没有私钥。那里有四个文件:idindex_uuidaction_set_namecreator_uid。我应该尝试重新下载密钥而不删除任何内容吗?

标签: vagrant vagrant-windows


【解决方案1】:

我在使用 vagrant 1.8.1 的几个盒子上遇到了同样的问题(即:geerlingguy/centos6)

我对那些盒子上的 Vagrant 1.7 没有任何问题。

在研究了为什么我不能在那个盒子里 ssh 之后,盒子上的 /home/vagrant 似乎有 755 个权限,并且 ssh 阻止对具有这些权限的用户进行身份验证

/var/log/secure 的摘录:

1 月 28 日 15:11:36 服务器 sshd[11721]:身份验证被拒绝:目录 /home/vagrant 的所有权或模式错误

要修复那个 vm,我只需要更改权限 /home/vagrant(在上面做了一个 chmod 700),现在我可以直接 ssh 进入我的盒子

我不知道如何直接修复它我认为你应该直接修改你的盒子

希望这会有所帮助!

编辑:我认为它是来自主机的共享文件夹,但它是共享的 /vagrant 不是 /home/vagrant

【讨论】:

  • 谢谢!希望,这就是原因。
【解决方案2】:

我在~/.ssh/config 的顶部有这个旧设置。

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

删除后,vagrant ssh 停止询问密码。

【讨论】:

    【解决方案3】:

    如果您将 Vagrantfile 保存在外部硬盘上并使用 exfat,因为您像我一样跨平台工作,您也会遇到此错误。由于exfat不保存权限,ssh会一直认为私钥权限是777=>打开。

    我将这个脚本放在一起作为一种解决方法,它可以在 powershell 和 bash(与 Linux、Mac 和 Windows 兼容)上运行:

    # ssh-agent # uncomment if your ssh-agent isn't running as a service
    cat V:\vm\arch_template\.vagrant\machines\default\virtualbox\private_key | ssh-add -
    ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no vagrant@localhost
    

    它需要一个有效的 ssh-agent 配置。还要注意正确的端口!如果在 vagrant up 期间 2222 不可用,Vagrant 会将其更改为不同的端口。

    【讨论】: