Thiết lập người dùng mới và xác thực khóa SSH bằng Ansible trên Ubuntu 18.04

theanh

Administrator
Nhân viên
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.

Đ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
[*] Quyền root

Chúng ta sẽ làm gì?​

  1. Thiết lập Ansible Control Machine
  2. Xác định Người dùng và Khóa SSH
  3. Tạo Tệp Kiểm kê
  4. Tạo Playbook Ansible
  5. Triển khai Máy chủ bằng Playbook
  6. 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
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ã:
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
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.


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'
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.
Mã:
sudo apt install whois -y
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.
Mã:
su - provision
ssh-keygen -t rsa
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').


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/
Đi tới thư mục 'ansible01' và tạo một tệp inventory mới 'inventory.ini' bằng vim.
Mã:
cd ansible01/
vim inventory.ini
Dán cấu hình sau vào đó.
Mã:
[webserver]
 ansi01 ansible_host=10.0.15.21
 ansi02 ansible_host=10.0.15.22
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'.
Mã:
vim ansible.cfg
Dán cấu hình sau vào đó.
Mã:
[defaults]
 inventory = /home/provision/ansible01/inventory.ini
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'.

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
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.
Mã:
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
xong
Tiếp theo, tạo playbook ansible có tên 'deploy-ssh.yml' bằng vim.
Mã:
vim deploy-ssh.yml
Dán playbook ansible sau đây vào đó.
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
Lưu và thoát.

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/
Bây giờ hãy chạy playbook 'deploy-ssh.yml' bằng lệnh như hiển thị bên dưới.
Mã:
ansible-playbook deploy-ssh.yml --ask-pass
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ướ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ờ 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ủ
Mã:
ssh 10.0.15.21
ssh 10.0.15.22
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.

Tham khảo​

 
Back
Bên trên