0

我正在尝试让 Ansible 和 Vagrant 正常工作。在一个文件夹(称为 Vagrant)中,我有一个 Vagrantfile、一个主机文件和一个ansible.cfg包含以下内容的文件:

Vagrantfile

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

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# General Vagrant VM configuration.
 config.vm.box = "geerlingguy/centos7"
 config.ssh.insert_key = false
 config.vm.synced_folder ".", "/vagrant", disabled: true

 config.vm.provider :virtualbox do |v|
   v.memory = 256
   v.linked_clone = true
 end

  # Server 1.
 config.vm.define "server1" do |app|
   app.vm.hostname = "server1.dev"
   app.vm.network :private_network, ip: "192.168.0.10"
 end
end

主机文件

[server1]
192.168.0.10

ansible.cfg归档

[defaults]
inventory = hosts
remote_user = vagrant
host_key_checking = False
ansible_ssh_private_key_file=<absolute_path_to_folder>/.vagrant/machines/server1/virtualbox/private_key
ansible_ssh_user=vagrant

当我运行以下命令时,它不起作用:

macbook-pro:Vagrant user1$  ansible server1 -m command -a uptime
192.168.0.10 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

文件夹中似乎没有私钥.vagrant/machines/server1/virtualbox文件。

当我将ansible.cfg文件更改为

[defaults]
inventory = hosts
remote_user = vagrant
host_key_checking = False
private_key_file = /Users/wauterw/.vagrant.d/insecure_private_key

有用。

如何使用/创建私钥.vagrant/machines/server1/virtualbox/private_key而不是通用的insecure_private_key

4

3 回答 3

1

按照其他答案的建议删除config.ssh.insert_key = false或更改为。true每当您创建实例时,这都会创建一个新密钥。

使用 hosts 文件指定您的 Ansible 连接。

ansible-2.1.1.0用and测试了这个Vagrant 1.8.1

ansible.cfg:

[defaults]
inventory = hosts
host_key_checking = False

hosts:

[server1]
192.168.0.10 ansible_ssh_private_key_file=.vagrant/machines/server1/virtualbox/private_key ansible_user=vagrant

运行ansible -vvvv以验证 ansible 正在使用的连接。您应该会看到如下内容:

IE

<192.168.0.10> SSH: EXEC ssh -C -vvv ... -o 'IdentityFile=".vagrant/machines/server1/virtualbox/private_key"' 
-o User=vagrant
于 2016-09-26T23:55:08.047 回答
0

我建议在您这样做时使用 Vagrant 供应商插入您自己的公钥vagrant up

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

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# General Vagrant VM configuration.
 config.vm.box = "geerlingguy/centos7"
 config.ssh.insert_key = false
 config.vm.synced_folder ".", "/vagrant", disabled: true

 config.vm.provider :virtualbox do |v|
   v.memory = 256
   v.linked_clone = true
 end

  # Server 1.
 config.vm.define "server1" do |app|
   app.vm.hostname = "server1.dev"
   app.vm.network :private_network, ip: "192.168.0.10"
   app.vm.provision "shell",
    inline: "echo <myPubKey> >> /home/vagrant/.ssh/authorized_keys"
 end
end

注意:如果你>>像我上面那样使用,它会保留不安全的密钥,但如果你使用>它会覆盖不安全的密钥。

于 2016-09-26T17:46:03.060 回答
0

注释掉您的以下行Vagrantfile

config.ssh.insert_key = false

您还可以将值更改为true(这是默认值;这就是您根本不需要该行的原因)。


这一行实际上阻止了创建私钥并命令 Vagrant 使用默认的不安全密钥。请参阅文档

于 2016-09-26T22:40:19.600 回答