Vagrant ssh身份验证失败

ic3*_*3rg 141 ssh virtualbox vagrant vagrantfile private-key

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...
Run Code Online (Sandbox Code Playgroud)

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

我在访客框上执行了以下步骤:

  • 启用Remote LoginAll Users.

  • 创建~/.ssh具有0700权限的目录.

  • 创建~/.ssh/authorized_keys具有0600权限的文件.

  • 将此公钥粘贴 到~/.ssh/authorized_keys

我也尝试使用私有(hostonly)网络而不是公共(桥接)网络,在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".

我也试过config.ssh.password在Vagrantfile中设置.这确实输出SSH auth method: password但仍未进行身份验证.

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

看起来其他人在这种配置上取得了成功,所以必定会有一些我做错了.

找到了这个线程并启用了GUI,但这没有用.

shi*_*ovk 163

一般信息:默认情况下,您可以使用ssh-connect

用户:vagrant密码:vagrant

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

首先,尝试:查看insecure_private_key机器配置中的流浪者

$ vagrant ssh-config
Run Code Online (Sandbox Code Playgroud)

例:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

如果仍然不起作用试试这个:

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

  2. 运行vagrant up(vagrant将生成一个新insecure_private_key文件)

在其他情况下,只需在 Vagrantfile以下位置设置forward_agent即可:

Vagrant::Config.run do |config|
   config.ssh.forward_agent = true
end
Run Code Online (Sandbox Code Playgroud)

有用:

配置git可以使用git-scm.com

设置完成后,此程序和创建个人系统私钥将在您的个人资料路径中:c:\users\USERNAME\.ssh\id_rsa.pub

PS:最后 - 建议你在Windows 10上查看Ubuntu

  • 在我的情况下它是问题,因为`config.ssh.private_key_path ="〜/ .ssh/id_rsa"`必须删除此行以进行配置工作 (4认同)
  • @shilovk +1 谢谢,谢谢,非常感谢。“第二,做”成功了。再次,非常感谢你。 (2认同)

Biz*_*ate 82

以上都不适合我.不知怎的,盒子在vagrant用户authorised_keys文件中添加了错误的公钥.

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

ssh vagrant@localhost -p 2222
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令将公钥内容从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
Run Code Online (Sandbox Code Playgroud)

完成后退出VM并再次尝试vagrant ssh.它现在应该工作.

  • 更新authorized_keys文件后运行`vagrant reload`.Vagrant将自动检测不安全密钥并为您重新生成密钥.之后应该工作. (4认同)

小智 48

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

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

它主要是由权限问题引起的,解决方法就是

vagrant ssh 
password: vagrant 
chmod 0600 ~/.ssh/authorized_keys
exit
Run Code Online (Sandbox Code Playgroud)

然后

vagrant reload 
Run Code Online (Sandbox Code Playgroud)

仅供参考:此问题仅影响CentOS,Ubuntu工作正常.


Raj*_*ham 41

在来宾计算机/ 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
Run Code Online (Sandbox Code Playgroud)

然后做流浪汉停止.这将删除并重新生成您的私钥.

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


san*_*ari 20

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

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

如果是这种情况,请祝贺您自己,如果需要的话,继续logout运行vagrant provision并继续完成有意义的任务.

如果您仍然遇到问题,可以方便地将详细标志添加到ssh命令以简化调试.您可以在双击之后传递该(或任何其他选项).例如,输入vagrant ssh -- -v.您可以根据需要随意添加任意数量的v,每个都会为您提供更多信息.


小智 13

无法运行 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...
Run Code Online (Sandbox Code Playgroud)

它无法进行身份验证,一次又一次地重试并最终放弃。


这是我如何通过 3 个步骤恢复它的形状:

1 - 找到IdentityFileVagrant 使用的:

$ 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
Run Code Online (Sandbox Code Playgroud)

2 - 检查公钥IdentityFile

$ ssh-keygen -y -f <path-to-insecure_private_key>
Run Code Online (Sandbox Code Playgroud)

它会输出如下内容:

ssh-rsa AAAAB3Nyc2EAAA...9gE98OHlnVYCzRdK8jlqm8hQ==
Run Code Online (Sandbox Code Playgroud)

3 - 使用密码登录 Vagrant 来宾vagrant

ssh -p 2222 -o UserKnownHostsFile=/dev/null vagrant@127.0.0.1
Run Code Online (Sandbox Code Playgroud)
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)
...
Run Code Online (Sandbox Code Playgroud)

注意:如果流浪汉客人被配置为禁止密码验证您需要打开垂直框”界面,双击客人姓名,登录的vagrant/vagrant,然后sudo -s和编辑/etc/ssh/sshd_config,查找PasswordAuthentication no线路(通常是在文件的结尾),更换noyes和重新启动ssh(即systemctl reload sshd/etc/init.d/sshd restart)。

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

$ 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...
Run Code Online (Sandbox Code Playgroud)

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

重要的是,如果您使用任何配置工具(即 Ansible 等)在重新启动来宾之前禁用它,因为 Vagrant 会认为您的来宾由于使用不安全的私钥而未配置。它将重新安装密钥,然后运行您的配置程序!

$ 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
Run Code Online (Sandbox Code Playgroud)

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

我从 Ned Batchelders 的文章中得到了这个,只是稍作修改- Ned 你是冠军!


Bra*_*rks 10

如果您尝试强制VM默认使用root用户进行SSH,也会发生这种情况....

例如,Vagrantfile中的配置可能会导致此失败:

config.ssh.username = 'root'
config.ssh.password = 'vagrant'
config.ssh.insert_key = 'true'
Run Code Online (Sandbox Code Playgroud)

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

  • 对我来说,只设置config.ssh.username ="vagrant"和config.ssh.password ="vagrant"就行了 (2认同)

GP8*_*P89 8

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

对我来说问题是我错过了私钥.vagrant/machines/default/virtualbox/private_key.我从原始盒子和Viola的相同位置复制了私钥!


Mic*_*ael 6

我已经找到了解决Win 8.2上的密钥问题的方法,其中我没有成功使用此处提到的任何方法.可能有趣的是,VirtualBox,Vagrant和Box的完全相同的组合在Win 7 Ultimate上运行没有任何问题.

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

config.ssh.password = "vagrant"
config.ssh.insert_key = false
Run Code Online (Sandbox Code Playgroud)

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

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

  2. 我将私钥复制到Vagrantfile所在和添加的同一目录

     config.ssh.private_key_path = "./id_rsa"
    
    Run Code Online (Sandbox Code Playgroud)

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


rob*_*ert 5

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

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

所以:

chmod 600 authorized_keys
chmod 700 .
chmod 700 ..
Run Code Online (Sandbox Code Playgroud)

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

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

  • 除了我的答案之外,我还想投票支持这个答案。在我的另一台机器上,这正是这个问题 - /home/vagrant/.ssh 目录的所有者错误。它是“root:root”,但必须是“vagrant:vagrant” (2认同)

小智 1

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

祝你好运。