Tôi muốn đề xuất một giải pháp khác:
- name: Create madhead user
user:
name: madhead
password: "{{ 'password' | password_hash('sha512') }}"
shell: /bin/zsh
update_password: on_create
register: madhead
- name: Force madhead to change password
shell: chage -d 0 madhead
when: madhead.changed
Tại sao nó tốt hơn? Giống như đã được lưu ý ở đây, các vở kịch của Ansible nên được đánh giá cao. Bạn nên nghĩ chúng không phải là một chuỗi hành động theo kiểu mệnh lệnh, mà giống như một trạng thái mong muốn, kiểu khai báo. Kết quả là bạn sẽ có thể chạy nó nhiều lần và nhận được cùng một kết quả, cùng một trạng thái máy chủ.
Tất cả điều này nghe có vẻ tuyệt vời, nhưng có một số sắc thái. Một trong số đó là quản lý người dùng. "Trạng thái mong muốn" có nghĩa là mỗi khi bạn chạy một vở kịch tạo người dùng, anh ta sẽ được cập nhật để khớp chính xác với trạng thái đó. Bằng cách "cập nhật", tôi có nghĩa là mật khẩu của anh ấy cũng sẽ được thay đổi. Nhưng hầu hết có lẽ nó không phải là thứ bạn cần. Thông thường, bạn chỉ cần tạo người dùng, đặt và hết hạn mật khẩu của anh ấy một lần, các lần chơi tiếp theo không nên cập nhật mật khẩu của anh ấy.
May mắn thay, Ansible có update_password
thuộc tính trong user
mô-đun giải quyết vấn đề này. Kết hợp điều này với các biến đã đăng ký, bạn cũng có thể hết hạn mật khẩu của mình chỉ khi người dùng thực sự được cập nhật.
Lưu ý rằng nếu bạn thay đổi trình bao của người dùng theo cách thủ công (giả sử, bạn không thích trình bao mà quản trị viên độc ác buộc trong trò chơi của anh ta) thì người dùng sẽ được cập nhật, do đó mật khẩu của anh ta sẽ hết hạn.
Cũng lưu ý cách bạn có thể dễ dàng sử dụng mật khẩu ban đầu bằng văn bản thuần túy trong các lượt chơi. Không cần mã hóa chúng ở nơi khác và dán các hàm băm, bạn có thể sử dụng bộ lọc Jinja2 cho việc đó. Tuy nhiên, đây có thể là một lỗ hổng bảo mật nếu ai đó tình cờ đăng nhập trước khi bạn đăng nhập.
password
không được cho là ở dạng văn bản thuần túy mà phải được băm sẵn.