场景:
根据hosts
文件的[clients]部分执行以下操作:
- 检查用户"foo"的SSH登录是否失败,如果是
- 使用authorized_key模块为用户"foo"添加SSH密钥
- 假设用户"foo"已经存在于远程机器上,并且SSH公钥已经在本地(ansible)主机上创建
我知道这个使用Ansible命令行的解决方案,但我希望能够将其放入一个剧本中。让脚本与输入包括sudo在内的密码的用户交互是可以接受的。
现在我想好了如何使用第三方角色GROG.authorized-key
来做我想做的事情,但它仍然需要我使用-K开关来运行剧本。Ansible(命令行开关旁边)中是否有什么东西只会在需要时提示输入密码?
- hosts: clients
vars:
authorized_key_list:
- name: pdo
authorized_keys:
- key: "{{ lookup('file', '/home/pdo/.ssh/id_rsa.pub') }}"
state: present
roles:
- { role: GROG.authorized-key }
我认为根据您的评论,这应该有效:
- hosts: clients
become: true
tasks:
- name: Add authorized_key to pdo user on the remote client machine(s)
authorized_key: user=foo key="{{ lookup('file', '/home/pdo/.ssh/id_rsa.pub') }}"
用-K调用它可以得到密码问题。这将在远程机器上生成一个sudo命令。这就是你需要的,不是吗?
特别感谢GROG,他帮助我理解了我做错了什么。
基本上,我试图在作为非root用户运行Ansible剧本的同时完成root
的工作。我最终创建了以下bootstrap.yml
,并使用以下命令运行它:
ansible-playbook ./bootstrap.yml -u root -k
这将以root身份运行我的剧本,并提示root密码,并且能够创建用户并建立sudo和无密码访问
---
# file: bootstrap.yml
# Execute once as root user to create a public key and install it to your client machine(s) using the following command
# ansible-playbook ./auth-client.yml -u root -k
# This requires you to install GROG.management-user role from the Ansible Galaxy using this command:
# ansible-galaxy install GROG.management-user
# Add pdo user on remote machines
- hosts: all
tasks:
- name: Add remote users
user: name=pdo group=users
# Generate SSK keys at the localhost for pde user
- hosts: localhost
tasks:
- name: Provision local pdo user
user: name=pdo generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa
# Install public key into remote machine
- hosts: all
vars:
authorized_key_list:
- name: pdo
authorized_keys:
- key: "{{ lookup('file', '/home/pdo/.ssh/id_rsa.pub') }}"
state: present
roles:
- { role: GROG.authorized-key }
# Add sudo privileges for pdo user
- hosts: all
roles:
- { role: GROG.sudo, become: yes }