为什么我不能将SSH密钥复制到Vagrant VM?

时间:2016-01-13 01:05:01

标签: ssh debian vagrant ansible ssh-keys

当我从我的顶级Vagrantfile目录执行我的cp-sshkey.yml playbook(以我自己身份登录,而不是流浪者用户)时...

ansible-playbook cp-sshkey.yml

我收到此错误:

TASK: [authorized_key user=vagrant key="{{ lookup('file', './files/id_rsa_vagrant.pub') }}"] *** 
fatal: [web1] => Failed to template user=vagrant key="{{ lookup('file', './files/id_rsa_vagrant.pub') }}": could not locate file in lookup: ./files/id_rsa_vagrant.pub

我不明白为什么会出现这种错误。它是一个非常简单的剧本,公钥文件就是我所说的:

.
├── .vagrant
│   └── machines
├── Vagrantfile
├── ansible.cfg
├── bootstrap-mgmt.sh
├── files
│   └── id_rsa_vagrant.pub
├── inventory.ini
├── secrets.yml
├── site.yml
├── website
└── cp-sshkey.yml

这是我的配置和主机文件以及剧本:

# ansible.cfg
[defaults]
hostfile = inventory.ini
remote_user = vagrant
private_key_file = .vagrant/machines/default/virtualbox/private_key
host_key_checking = False

# inventory.ini
[local]
localhost ansible_connection=local

[web]
web1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

# cp-sshkey.yml
- name: Install vagrant's public key on VM
  hosts: web1
  sudo: True
  tasks:
    - authorized_key: user=vagrant key="{{ lookup('file', './files/id_rsa_vagrant.pub') }}"

我在这里做错了什么?感谢。

1 个答案:

答案 0 :(得分:0)

快速回答会变得更好 - 我自己玩这个但只是学习:

我假设您正在尝试将您的公钥(或您的ansible控制台上与流浪键无关的其他键)添加到流浪汉机器,以允许您在没有vagrant ssh

我假设您已经检查了所有文件权限等,并且您没有处理多个实例。尝试使用127.0.0.1和localhost并尝试使用完整文件路径而不是相对于工作目录 - 我的示例使用带有模板的子文件夹中的文件,但不在下面的工作代码段中。

  • 你能vagrant ssh 并且可能检查.ssh / authorized_keys文件?
  • 您是否能够确认ansible可以连接ansible web -a df
  • 之类的内容
  • 您是否可以使用ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p 2222
  • 进入Vagrant机器

在我的角色任务文件中,我有这个任务。

- name: Copy origin public key to auth keys
  authorized_key: user=vagrant key="{{  lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

我的主机定义也有用户: web1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user=vagrant 但假设您使用的配置应该有效。

这个剧本对我有用,虽然我的目录结构不同 - 我希望你觉得你很好。

要注意的一些事情让我抓住了:

  • 当您重建Vagrant机器时,如果已经ssh'd,则需要刷新.ssh / known_hosts - 可以使用sh-keygen -R [localhost]:2222
  • 从known_hosts中删除
  • 让我不安地看到localhost作为机器标签

我的设置:

  • ansible 2.2.0.0
  • vagrant版本:1.9.1
  • Mac OSX
  • VBox 5.1.6
  • Vagrant Instance - ubuntu / trusty64