我正在尝试编写 Ansible 剧本来引导我的服务器。默认情况下,在 Linode 上,我只能使用密码以 root 身份登录,因此我的剧本以 root 身份登录,使用 SSH 密钥创建非 root 用户,并禁用 root 和密码 SSH。
这是一个问题,因为我现在无法再次运行该剧本,因为 root 登录被禁用!我希望剧本是幂等的,并且在引导它们之后不必添加和删除主机。
小智 10
我喜欢这样做:
- hosts: all
remote_user: root
gather_facts: no
tasks:
- name: Check ansible user
command: ssh -q -o BatchMode=yes -o ConnectTimeout=3 ansible@{{ inventory_hostname }} "echo OK"
delegate_to: 127.0.0.1
changed_when: false
failed_when: false
register: check_ansible_user
- block:
- name: Create Ansible user
user:
name: ansible
comment: "Ansible user"
password: $6$u3GdHI6FzXL01U9q$LENkJYHcA/NbnXAoJ1jzj.n3a7X6W35rj2TU1kSx4cDtgOEV9S6UboZ4BQ414UDjVvpaQhTt8sXVtkPvOuNt.0
shell: /bin/bash
- name: Add authorized key
authorized_key:
user: ansible
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
exclusive: yes
- name: Allow sudo for ansible
copy:
content: ansible ALL=(ALL) ALL
dest: /etc/sudoers.d/ansible
mode: 0600
when: check_ansible_user | failed
Run Code Online (Sandbox Code Playgroud)
我尝试使用我的 ansible 用户连接到远程主机。如果这是不可能的(在第一次运行时),我以 root 身份连接并创建 ansible 用户及其authorized_keys文件和sudo权限。
在后续运行中,以 ansible 用户身份连接工作,因此可以跳过任务块。
一旦远程主机被引导,我就可以继续使用 ansible 用户并且become:
- hosts: all
remote_user: ansible
become: yes
roles:
- ...
Run Code Online (Sandbox Code Playgroud)
我会做以下事情:
sshd_config(我倾向于建议您使用 来管理整个文件,template但这取决于您),以及禁用 root 登录对于第一个角色(基础角色),我倾向于使用类似的东西:
name: base | local ansible user | create user
user:
name: "{{ local_ansible_user }}"
group: "{{ local_ansible_group }}"
home: "/home/{{ local_ansible_user }}"
state: present
generate_ssh_key: "{{ local_ansible_generate_key }}"
ssh_key_bits: 4096
ssh_key_type: rsa
tags:
- ansible
- local_user
- name: base | local ansible user | provision authorised keys
authorized_key:
user: "{{ local_ansible_user }}"
state: present
key: "{{ item }}"
with_items: "{{ local_ansible_authorised_keys }}"
tags:
- ansible
- authorised_keys
Run Code Online (Sandbox Code Playgroud)
对于 SSH 配置,我将使用:
- name: openssh | server | create configuration
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0640"
validate: "/usr/sbin/sshd -tf %s"
notify:
- openssh | server | restart
tags:
- ssh
- openssh
Run Code Online (Sandbox Code Playgroud)
Ansible 的角色依赖关系记录在此处。
您也可以仅使用剧本中的排序来执行此操作。
我在 github 上有一些 ansible 的东西(上面的内容取自其中),如果你想在上下文中查看它
| 归档时间: |
|
| 查看次数: |
12974 次 |
| 最近记录: |