pimvh.cloud_init
需求
- 安装 Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
- 安装 requirements.yaml(本角色使用 pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml
必需的变量
审查以下默认变量:
cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # ansible 用户的密码哈希值
cloud_init_github_token: ""
cloud_init_userdata:
hostname: hostname
fqdn: hostname.example.com
groups: []
users:
- name: my user
gecos: 我的用户描述
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL # 无需密码的 sudo
groups: sudo # sudo 用户组成员
lock_passwd: false # 解锁密码
passwd: "{{ password_here | password_hash('sha512') }}"
ssh_authorized_keys: [] # 可选的授权密钥
runcmd: [] # 额外的命令
writefiles: [] # 额外的文件
packages: [] # 额外安装的包
cloud_init_networkdata:
# 定义 IP,并使用下面的 `default routes` 和 `nameservers`
ipv4: << ipv4 >>
ipv6: << ipv6 >>
# --- 或者 ---
# 整个 netplan 输出
# 如下所示
netplan:
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
addresses:
- << addr >>
gateway4: << addr >>
gateway6: << addr >>
nameservers:
addresses:
- << dns_server ip >>
cloud_init_netplan_routes:
- to: default
via: 1.0.0.1
- to: default
via: 2001:db8::11
cloud_init_netplan_nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
cloud_init_add_to_known_hosts: true
cloud_init_reboot_on_finish: true
cloud_init_enable_ssh_ca: true
# 我建议使用这样的查找插件:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'your_ca') }}"
# 或者使用变量查找:
# "{{ lookup('ansible.builtin.vars', 'your_ca') }}"
cloud_init_ssh_host_ca_privatekey: ""
cloud_init_ssh_host_ca_privatekey_pass: ""
cloud_init_ssh_host_ca_publickey: ""
cloud_init_ssh_user_ca_publickeys: []
cloud_init_enable_ansible_pull: false
cloud_init_ansible_pull_repo_owner: ""
cloud_init_ansible_pull_repo_name: ""
cloud_init_ansible_pull_playbook_name: ""
cloud_init_ansible_pull_deploy_key_name: "Ansible-pull 部署密钥"
cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
# 在服务器上配置 CA 使用
- echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
# 仅删除主机 CA 的公钥
- rm -f /etc/ssh/host_ca.pub
# 通过追加云初始化 SSH 配置来配置新的 TrustedUserCAkey
- echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
# 重启 sshd 使更改生效
- systemctl restart sshd
示例剧本
hosts:
- foo
roles:
- pimvh.cloud_init
TLDR - 如果我运行这个,发生什么
- 确认必需的变量已定义
- 创建目录以开始 cloud-init 文件
- 获取 Github 主机密钥(如果请求)
- 生成用于 Ansible pull 的 SSH 密钥对(如果请求)
- 配置 SSH 主机 CA 和用户 CA(如果请求)
- 在控制器上签署证书密钥
- 通过在 cloud-init 配置中放置 repository_url 的 requirements.yaml 来配置 Ansible-pull(如果请求)
- 模板 cloud_init
- 将签名证书模板化为 cloud-init 配置
- 模板化所需的 cloud-init userdata
- 模板化 cloud-init networkdata
- 模板化 Ansible pull 的 requirements.yaml
- 将 Github 部署密钥添加到请求的 Ansible pull 存储库(如果请求)
- 作为 ansible 用户在系统上运行 Ansible pull(如果请求)
- 将 SSH CA 添加到已知主机(如果请求)
未来改进
- 找到一种更好的方法使用不同的验证方法获得对 Github 的短期访问。
来源
SSH CA 逻辑的一部分基于 以下博客
安装
ansible-galaxy install pimvh.cloud_init
许可证
gpl-3.0
下载
1.5k
拥有者