【问题标题】:Why can't I copy SSH keys to Vagrant VM?为什么我不能将 SSH 密钥复制到 Vagrant VM?
【发布时间】:2016-04-17 20:06:28
【问题描述】:

当我从顶级 Vagrantfile 目录执​​行我的 cp-sshkey.yml 剧本(以我自己而不是 vagrant 用户身份登录)时...

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') }}"

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

【问题讨论】:

  • 你绝对应该用ansible 以及你正在使用的客户操作系统来标记这个问题。
  • 你的 ansible 版本是什么?我相信在 1.9 分支中也报告了同样的情况
  • 我使用的是 Ansible 1.9.2。
  • 不是专家,但您不应该复制您的个人公钥而不是 vagrant 密钥吗?看起来您正在尝试将公钥复制到已经包含该密钥的虚拟机/帐户中?
  • 你能ping通流浪机器吗? web1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user=vagrant

标签: ssh debian vagrant ansible ssh-keys


【解决方案1】:

快速回答会改进 - 我自己也在玩这个,但只是在学习:

我假设您正在尝试将您的公钥(或您的 ansible 控制台上与 vagrant 密钥无关的其他密钥)添加到 vagrant 机器,以允许您在没有 vagrant ssh 的情况下通过 ssh 进入它

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

  • 你可以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 ssh 进入 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
  • 流浪者版本:1.9.1
  • Mac OSX
  • VBox 5.1.6
  • Vagrant 实例 - ubuntu/trusty64

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2021-08-26
    • 2020-12-04
    • 2014-08-20
    • 2015-12-07
    • 2012-04-15
    • 2023-01-08
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多