如何使用 Vagrant up 对虚拟机进行身份验证?

如何使用 Vagrant up 对虚拟机进行身份验证?

Vagrant Up 期间身份验证失败,但 vagrant ssh 和 ssh vagrant@localhost -p2222 可以正常工作

我想在启动时使用 Vagrant 执行 shell 脚本。Vagrant 无法进行身份验证,而 VM 已使用以下内容启动vagrant up

c:\temp\helloworld>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'helloworld'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: helloworld_default_1398419922203_60603
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> 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: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    default: Error: Authentication failure. Retrying...
    ...

执行后,CTRL + C可以使用vagrant ssh和对虚拟机进行身份验证ssh vagrant@localhost -p2222

Vagrant 文件

我使用默认的 Vagrantfile 并且只更改了主机名:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "helloworld"
  ...

Vagrant 版本

c:\temp\helloworld>vagrant --version
Vagrant 1.5.1

问题

如何使用对 VM 进行身份验证vagrant up

答案1

此问题是由于 Vagrant 框中没有公钥而导致的。以下两个选项之一可解决此问题。

第一个选项是使用 Packer 创建一个新 Vagrant box。添加以下片段到 json 文件并构建 Vagrant 框。

"provisioners": [{
    "type": "shell",
    "scripts": [
      "scripts/vagrant.sh"
    ]
}]

本内容流浪脚本如下:

#!/bin/bash
yum install wget -y

mkdir /home/vagrant/.ssh
wget --no-check-certificate \
    'https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub' \
    -O /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh
chmod -R go-rwsx /home/vagrant/.ssh

第二种选择是,vagrant package在指定以下命令后重新打包()Vagrant 框这里已运行:

mkdir -p /home/vagrant/.ssh
wget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
chmod 0700 /home/vagrant/.ssh
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

答案2

第一次尝试:看什么流浪者私钥在你的机器配置中

$ 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

第二,要做到: 更改文件内容不安全的私钥使用您自己的系统内容私钥

答案3

我也无法超越:

默认:SSH 身份验证方法:私钥

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

为了让 vagrant up 继续前进,在 BIOS 设置中我必须反直觉地进行:

禁用:虚拟化

启用:VT-X

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

答案4

确保您的虚拟机具有网络访问权限。如果您使用 Virtual Box,请进入您的机器设置、网络选项卡并确保已选中“电缆已连接”。

相关内容