Ansible là một công cụ tự động hóa đơn giản giúp tự động triển khai ứng dụng phần mềm, cung cấp đám mây và quản lý cấu hình. Đây là một công cụ điều phối máy chủ giúp bạn quản lý và kiểm soát một số lượng lớn các nút máy chủ từ những nơi duy nhất được gọi là 'Máy điều khiển'. Ansible được Michael DeHaan tạo ra vào năm 2012 và được viết bằng Python và Powershell.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai người dùng mới và kích hoạt xác thực dựa trên Khóa SSH bằng công cụ tự động hóa Ansible. Chúng ta cũng sẽ tìm hiểu cách cấu hình 'Control Machine' của Ansible, cũng như cách viết playbook ansible đơn giản.
Sau khi cài đặt hoàn tất, chúng ta sẽ thêm một người dùng hệ thống mới.
Chúng ta sẽ thêm một người dùng mới có tên 'provision' để thực hiện cung cấp máy chủ bằng Ansible.
Thêm người dùng mới 'provision' và cấp mật khẩu cho người dùng.
Bây giờ hãy thêm người dùng 'provision' cho sudo mà không cần mật khẩu bằng cách tạo tệp cấu hình mới trong '/etc/sudoers.d/' bằng lệnh bên dưới.
Một người dùng mới đã được tạo và bây giờ người dùng này có thể sử dụng sudo mà không cần mật khẩu.
Đối với mỗi máy chủ ('ansi01' và 'ansi02'), chúng ta sẽ tạo một người dùng mới có tên 'provision' với mật khẩu 'secret01'. Và chúng ta cần mã hóa mật khẩu 'secret01' bằng lệnh mkpasswd.
Mã hóa mật khẩu 'secret01' bằng lệnh bên dưới.
Lưu ý:
Đảm bảo rằng gói 'whois' đã được cài đặt trên hệ thống hoặc bạn có thể cài đặt bằng lệnh sau.
Và bạn sẽ nhận được mật khẩu được mã hóa SHA-512.
Tiếp theo, chúng ta sẽ tạo một ssh-key mới.
Đăng nhập vào người dùng 'provision' và tạo khóa ssh bằng lệnh ssh-keygen.
Bây giờ người dùng và mật khẩu đã được đã định nghĩa và khóa ssh đã được tạo nằm tại thư mục '.ssh').
Đăng nhập với tư cách là người dùng 'provision' và tạo một thư mục mới cho dự án.
Đi tới thư mục 'ansible01' và tạo một tệp inventory mới 'inventory.ini' bằng vim.
Dán cấu hình sau vào đó.
Lưu và thoát.
Bây giờ hãy tạo một tệp cấu hình ansible mới 'ansible.cfg'.
Dán cấu hình sau vào đó.
Lưu và thoát.
Tệp inventory ansible đã được tạo và các tập lệnh ansible của chúng ta sẽ nằm trong người dùng 'provision', bên trong thư mục 'ansible01'.
Trong bước này, chúng ta sẽ tạo một playbook ansible mới để triển khai người dùng mới, triển khai khóa ssh và cấu hình dịch vụ ssh.
Trước khi tạo một playbook ansible mới, chúng ta sẽ quét tất cả dấu vân tay máy chủ bằng lệnh ssh-keyscan như bên dưới.
Dấu vân tay của các máy chủ đó sẽ được lưu trữ tại tệp '.ssh/known_hosts'.
Lưu ý:
Nếu bạn có nhiều nút máy chủ, bạn có thể lưu danh sách máy chủ của mình rồi quét dấu vân tay khóa ssh theo cách thủ công bằng tập lệnh bash như được hiển thị bên dưới.
Tiếp theo, tạo playbook ansible có tên 'deploy-ssh.yml' bằng vim.
Dán playbook ansible sau đây vào đó.
Lưu và thoát.
Trên tập lệnh playbook:
Bây giờ hãy chạy playbook 'deploy-ssh.yml' bằng lệnh như hiển thị bên dưới.
Nhập mật khẩu gốc của bạn và bạn sẽ nhận được kết quả như bên dưới.
Tất cả các tác vụ để triển khai người dùng mới và khóa ssh đã được hoàn thành thành công.
Bây giờ bạn sẽ nhận được các thông báo màu xanh lá cây như bên dưới.
Bây giờ chúng ta có thể quản lý các máy chủ 'ansi01' và 'ansi02' bằng Ansible và người dùng 'provision' sẽ là người dùng mặc định cho Ansible.
Kiểm tra kết nối đến các máy chủ
Và bạn sẽ được kết nối đến từng máy chủ bằng tệp khóa mặc định '.ssh/id_rsa' và sử dụng người dùng 'provision'.
Việc triển khai người dùng và ssh-key mới bằng ansible đã hoàn tất thành công.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách triển khai người dùng mới và kích hoạt xác thực dựa trên Khóa SSH bằng công cụ tự động hóa Ansible. Chúng ta cũng sẽ tìm hiểu cách cấu hình 'Control Machine' của Ansible, cũng như cách viết playbook ansible đơn giản.
Điều kiện tiên quyết
- 2 hoặc nhiều Máy chủ Ubuntu 18.0410.0.15.10 control-machine
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
Chúng ta sẽ làm gì?
- Thiết lập Ansible Control Machine
- Xác định Người dùng và Khóa SSH
- Tạo Tệp Kiểm kê
- Tạo Playbook Ansible
- Triển khai Máy chủ bằng Playbook
- Kiểm tra
Bước 1 - Thiết lập Ansible Control Machine Trong hướng dẫn này, chúng ta sẽ sử dụng máy chủ Ubuntu 16.04 làm 'Machine Control' của Ansible và máy chủ ansible. Bước đầu tiên chúng ta cần làm là thiết lập 'máy điều khiển'.
Chúng ta sẽ cài đặt python và ansible trên 'máy điều khiển' ansible bằng cách chạy lệnh sau.
Mã:
sudo apt install python ansible -y
Sau khi cài đặt hoàn tất, chúng ta sẽ thêm một người dùng hệ thống mới.
Chúng ta sẽ thêm một người dùng mới có tên 'provision' để thực hiện cung cấp máy chủ bằng Ansible.
Thêm người dùng mới 'provision' và cấp mật khẩu cho người dùng.
Mã:
useradd -m -s /bin/bash provision
passwd provision
Mã:
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
Bước 2 - Xác định người dùng và khóa SSH
Trong bước này, chúng ta sẽ xác định người dùng cho máy chủ ansible. Người dùng này sẽ được ansible tự động tạo, vì vậy chúng ta chỉ cần xác định tên người dùng, mật khẩu và khóa công khai ssh.Đối với mỗi máy chủ ('ansi01' và 'ansi02'), chúng ta sẽ tạo một người dùng mới có tên 'provision' với mật khẩu 'secret01'. Và chúng ta cần mã hóa mật khẩu 'secret01' bằng lệnh mkpasswd.
Mã hóa mật khẩu 'secret01' bằng lệnh bên dưới.
Mã:
mkpasswd --method=SHA-512
NHẬP MẬT KHẨU 'secret01'
Đảm bảo rằng gói 'whois' đã được cài đặt trên hệ thống hoặc bạn có thể cài đặt bằng lệnh sau.
Mã:
sudo apt install whois -y
Tiếp theo, chúng ta sẽ tạo một ssh-key mới.
Đăng nhập vào người dùng 'provision' và tạo khóa ssh bằng lệnh ssh-keygen.
Mã:
su - provision
ssh-keygen -t rsa
Bước 3 - Tạo Inventory mới
Trong bước này, chúng ta sẽ định nghĩa các tệp inventory cho tất cả các máy chủ lưu trữ.Đăng nhập với tư cách là người dùng 'provision' và tạo một thư mục mới cho dự án.
Mã:
su - provision
mkdir -p ansible01/
Mã:
cd ansible01/
vim inventory.ini
Mã:
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22
Bây giờ hãy tạo một tệp cấu hình ansible mới 'ansible.cfg'.
Mã:
vim ansible.cfg
Mã:
[defaults]
inventory = /home/provision/ansible01/inventory.ini
Tệp inventory ansible đã được tạo và các tập lệnh ansible của chúng ta sẽ nằm trong người dùng 'provision', bên trong thư mục 'ansible01'.
Bước 4 - Tạo Ansible Playbook
Ansible Playbook là tập hợp các hướng dẫn mà bạn gửi để chạy trên một hoặc một nhóm máy chủ lưu trữ. Nó đại diện cho ansible-provisioning, trong đó tự động hóa được định nghĩa là các tác vụ và tất cả các công việc như cài đặt gói, chỉnh sửa tệp sẽ được thực hiện bởi các mô-đun ansible.Trong bước này, chúng ta sẽ tạo một playbook ansible mới để triển khai người dùng mới, triển khai khóa ssh và cấu hình dịch vụ ssh.
Trước khi tạo một playbook ansible mới, chúng ta sẽ quét tất cả dấu vân tay máy chủ bằng lệnh ssh-keyscan như bên dưới.
Mã:
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts
Lưu ý:
Nếu bạn có nhiều nút máy chủ, bạn có thể lưu danh sách máy chủ của mình rồi quét dấu vân tay khóa ssh theo cách thủ công bằng tập lệnh bash như được hiển thị bên dưới.
Mã:
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
xong
Mã:
vim deploy-ssh.yml
Mã:
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Thêm một người dùng có tên provision
user:
name=provision
password={{ provision_password }}
- name: Thêm người dùng provision vào sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Triển khai Khóa SSH
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Vô hiệu hóa Xác thực Mật khẩu
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- khởi động lại ssh
- name: Tắt Đăng nhập Root
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted
Trên tập lệnh playbook:
- chúng ta tạo tập lệnh playbook 'deploy-ssh.yml' để áp dụng trên tất cả các máy chủ được xác định trong tệp 'inventory.ini'.
- chúng ta tạo biến ansible 'provision_password', chứa mật khẩu được mã hóa cho người dùng mới.
- Đặt Ansible facts thành 'no'.
- Xác định người dùng 'root' là người dùng từ xa để thực hiện tự động hóa tác vụ.
- Chúng tôi tạo các tác vụ mới để thêm người dùng mới, thêm người dùng vào sudoers và tải lên khóa ssh.
- Chúng tôi tạo các tác vụ mới để cấu hình dịch vụ ssh, vô hiệu hóa đăng nhập root và vô hiệu hóa xác thực mật khẩu. Các tác vụ để cấu hình ssh sẽ kích hoạt trình xử lý 'khởi động lại ssh'.
- Chúng tôi tạo một trình xử lý để khởi động lại dịch vụ ssh.
Bước 5 - Chạy Playbook
Đăng nhập vào người dùng 'provision' và đi đến thư mục 'ansible01'.
Mã:
su - provision
cd ansible01/
Mã:
ansible-playbook deploy-ssh.yml --ask-pass
Tất cả các tác vụ để triển khai người dùng mới và khóa ssh đã được hoàn thành thành công.
Bước 6 - Kiểm tra
Kiểm tra bằng lệnh ansible.
Mã:
ansible webserver -m ping
ansible webserver -m shell -a id
Bây giờ chúng ta có thể quản lý các máy chủ 'ansi01' và 'ansi02' bằng Ansible và người dùng 'provision' sẽ là người dùng mặc định cho Ansible.
Kiểm tra kết nối đến các máy chủ
Mã:
ssh 10.0.15.21
ssh 10.0.15.22
Việc triển khai người dùng và ssh-key mới bằng ansible đã hoàn tất thành công.