如何使用 Ansible 在多台服务器上为多个用户部署多个 ssh_key?
How can I deploy multiple ssh_key for multiple users on multiple servers with Ansible?
我的环境由 2 个 Web 服务器和 2 个数据库服务器组成。
我的团队中有一位新开发人员。我需要在每台服务器上部署他的 ssh 密钥。
他必须能够连接到网络服务器上的用户 ubuntu
和 www-data
以及数据库服务器上的用户 ubuntu
。
我的服务器配备了 Ansible。
我该怎么做?
我通过像这样创建一个 ssh-keys 任务解决了它。
在roles/ssh-keys/tasks/main.yml
中:
---
- name: add authorized key
authorized_key: user={{ item }} key="{{ lookup('file', 'authorized_keys') }}"
with_items: authorized_ssh_users
when: authorized_ssh_users is defined
在roles/ssh-keys/files/authorized_keys
中:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev1] dev1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev2] dev2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev3] dev3
在hosts/production
中:
[webservers]
webserv1-hostname
webserv2-hostname
[webservers:vars]
authorized_ssh_users=['ubuntu','www-data']
[dbservers]
dbserv1-hostname
dbserv2-hostname
[dbservers:vars]
authorized_ssh_users=['ubuntu']
然后在playbook.yml
:
- name: Provision ssh keys
hosts: all
sudo: true
roles:
- ssh-keys
有了这个解决方案,我可以管理服务器/用户的每个组合来部署密钥。
这个角色很适合你。正在努力将其导入 Galaxy,但由于某种原因无法导入。
https://github.com/smiller171/ansible-user-management
设置此角色后,您只需为所需的用户和组以及要删除的任何用户传入变量,如下所示:
---
- hosts: all
sudo: yes
roles:
- scott.miller171.manage_users
vars:
- manage_users_allowed:
- name: foo
authorized:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAlPYybp3CWDzRPo0uF/woyqkfhpZK2T7zn16z+fGYlRQl6gXATIUB4JYfr9pfD+SOW2T4X78P+/h1o4QPCwoesLacaFEFGwUb+SzhVVm6B6q4WMAiJWD6OVXh+SVVvD9rdcz5RMVLqQngrRqBlj4kBIMQ3S8h1cCESbR2P6jszgFj0I6p3tQCpo9yjcVwLqvWFKJgzEm2E2wV/gmrc0PhVRP2guIRN4p6M2ZyIPprdZ6PA8m7Rs4yN3jQ/0alrQ23ECCU4lHoVG9fwvLIq1vh4ikPcUrdA8sSHTE1pkpzvrTv7FtkuUcBrDMedFE7E8dB9pPS+vXIBWVUYJhp9WzVkQ== user@domain.com"
- manage_users_unauthorized:
- foobar
- manage_users_groups: "sudo,adm,dialout,cdrom,floppy,audio,video,plugdev"
我的环境由 2 个 Web 服务器和 2 个数据库服务器组成。
我的团队中有一位新开发人员。我需要在每台服务器上部署他的 ssh 密钥。
他必须能够连接到网络服务器上的用户 ubuntu
和 www-data
以及数据库服务器上的用户 ubuntu
。
我的服务器配备了 Ansible。
我该怎么做?
我通过像这样创建一个 ssh-keys 任务解决了它。
在roles/ssh-keys/tasks/main.yml
中:
---
- name: add authorized key
authorized_key: user={{ item }} key="{{ lookup('file', 'authorized_keys') }}"
with_items: authorized_ssh_users
when: authorized_ssh_users is defined
在roles/ssh-keys/files/authorized_keys
中:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev1] dev1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev2] dev2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[ssh_pub_key_of_dev3] dev3
在hosts/production
中:
[webservers]
webserv1-hostname
webserv2-hostname
[webservers:vars]
authorized_ssh_users=['ubuntu','www-data']
[dbservers]
dbserv1-hostname
dbserv2-hostname
[dbservers:vars]
authorized_ssh_users=['ubuntu']
然后在playbook.yml
:
- name: Provision ssh keys
hosts: all
sudo: true
roles:
- ssh-keys
有了这个解决方案,我可以管理服务器/用户的每个组合来部署密钥。
这个角色很适合你。正在努力将其导入 Galaxy,但由于某种原因无法导入。
https://github.com/smiller171/ansible-user-management
设置此角色后,您只需为所需的用户和组以及要删除的任何用户传入变量,如下所示:
---
- hosts: all
sudo: yes
roles:
- scott.miller171.manage_users
vars:
- manage_users_allowed:
- name: foo
authorized:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAlPYybp3CWDzRPo0uF/woyqkfhpZK2T7zn16z+fGYlRQl6gXATIUB4JYfr9pfD+SOW2T4X78P+/h1o4QPCwoesLacaFEFGwUb+SzhVVm6B6q4WMAiJWD6OVXh+SVVvD9rdcz5RMVLqQngrRqBlj4kBIMQ3S8h1cCESbR2P6jszgFj0I6p3tQCpo9yjcVwLqvWFKJgzEm2E2wV/gmrc0PhVRP2guIRN4p6M2ZyIPprdZ6PA8m7Rs4yN3jQ/0alrQ23ECCU4lHoVG9fwvLIq1vh4ikPcUrdA8sSHTE1pkpzvrTv7FtkuUcBrDMedFE7E8dB9pPS+vXIBWVUYJhp9WzVkQ== user@domain.com"
- manage_users_unauthorized:
- foobar
- manage_users_groups: "sudo,adm,dialout,cdrom,floppy,audio,video,plugdev"