Ansible ssh公钥复制

时间:2016-05-12 13:54:48

标签: ssh ansible

我想创建新用户,然后将SSH密钥复制到此用户目录(我在执行角色之前已经获得了此密钥)。之后,我想禁用密码登录。

这是我现在所拥有的: 我的任务/ main.yml

- name: Add users
  user: name={{ item }}
        groups=users,wheel
        update_password=on_create
        password=$6$QoFz/cLhsroToP$4...
    with_items:"{{ list }}"

- name: Copy SSH keys
  authorized_key: user={{ item }} key={{ item }}.pub state=present
with_items: "{{ list }}"

我的vars / main.yml文件:

list:
    - 'user1'
    - 'user2'
    - 'user3'

这就是我的问题 - 我的钥匙存放在哪里?这种复制方式是否正确?

我收到了错误:

failed: [127.0.0.1] => (item=user1) => {"failed": true, "item": "user1"}
msg: invalid key specified: user1.pub

2 个答案:

答案 0 :(得分:1)

第二个任务将失败,因为authorized_key期望key参数为字符串(authorized_key docs)。您仍然可以使用list参数来获取密钥文件的内容,但您必须使用lookup。 所以这就是第二个任务的样子:

- name: "Copy SSH Keys"
  authorized_key: user={{ item }} key={{ lookup('file', item) }} state=present

回答你的问题“文件存储在哪里,这完全取决于你。默认情况下(如果你没有指定路径),模块将查看所有可用的files/目录。所以如果这是它将要研究的角色:

/roles/your_role/files

/files

./files

Lookups docs

答案 1 :(得分:0)

感谢您的回答,我无法对您的帖子发表评论,因为我的回答太长了。

我终于可以从ansible端看到密钥,但任务仍然失败。这是输出:

failed: [127.0.0.1] => (item=user1) => {"failed": true, "item": "user1"}
msg: this module requires key=value arguments (['user=user1', 'key=ssh-rsa', 'AAAAB3NzaC1yc2EAAAADAQABAAA...', 'user@domain', 'state=present'])

我做错了吗?

找到答案! 引用键输入可以解决问题,因此我的情况中的函数应如下所示:

- name: "Copy SSH Keys"
  authorized_key: user="{{ item }}" key="{{ lookup('file', item) }}" state=present

希望将来会帮助某人。非常感谢您的帮助!