2014-10-05 17 views
6

Tôi đã viết một kịch bản ansible để loại bỏ những khóa SSH từ các máy chủ từ xa:Thêm nhiều khóa SSH sử dụng ansible

--- 
- name: "Add keys to the authorized_keys of the user ubuntu" 
    user: ubuntu 
    hosts: www 
    tasks: 
    - name: "Remove key #1" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_one.pub 
    - name: "Remove key #2" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_file: 
    - id_rsa_number_two.pub 
... 

Thêm mỗi tập tin là một nhiệm vụ khác nhau là lố bịch, vì vậy tôi đã cố gắng sử dụng with_fileglob:

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ item }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 

Nhưng điều này không thành công với dòng như thế này:

thất bại: [www.example.com] => (mục =/Người dùng/adamatan/ansible/id_rsa_one.pub) => {"không thành công": đúng, "mục": "/Users/adamatan/ansible/id_rsa_one.pub"} msg: khóa không hợp lệ được chỉ định:/Người dùng/adamatan/ansible/id_rsa_one.pub

Tệp khóa tương tự được xóa thành công bằng cách sử dụng tác vụ duy nhất nhưng không thành công khi nó là một phần của fileglob.

Làm cách nào để thêm hoặc xóa các khóa SSH bằng ansible?

Trả lời

11

Tôi tin rằng bạn chỉ nhận được tên tập tin sử dụng with_fileglob, nhưng with_file lấy nội dung của tập tin. Và mô-đun authorized_key yêu cầu khóa thực tế.

Vì vậy, bạn vẫn nên lặp lại bằng cách sử dụng with_fileglob, nhưng thay vì gửi tên tệp cho thông số "key =", bạn nên sử dụng file lookup plugin).

- name: "Remove all keys at once" 
    authorized_key: user=ubuntu key="{{ lookup('file', item) }}" state=absent 
    with_fileglob: 
     - /Users/adamatan/ansible/id_rsa*.pub 
+2

Vì vậy, sửa đổi này hoạt động tốt cho việc cập nhật/xóa hàng loạt. Đây là vấn đề của tôi - Tôi có chìa khóa trên các máy chủ từ một người không còn ở đây nữa. Làm thế nào tôi có thể thanh lọc và ghi đè lên tập tin authorized_keys với danh sách chủ của tôi về các phím hoạt động? Khi tôi chạy tập lệnh này, nó loại bỏ (nếu vắng mặt) các phím đang hoạt động của tôi hoặc thêm (nếu có) nhưng nó không bao giờ loại bỏ các khóa không có trong tệp * .pub của tôi. – Valien

+1

@Valien cho nhiều khóa độc quyền, xem ví dụ trong [yêu cầu kéo] này (https://github.com/ansible/ansible-modules-core/pull/4167/files). – sudoman

+1

Bạn cũng có thể tạo '~/.ssh /' và sao chép qua các tệp 'authorized_keys' tĩnh cho tất cả người dùng trong một số nhóm máy chủ. Trong trường hợp đó, bạn sẽ có toàn quyền kiểm soát nội dung tập tin. – sudoman

Các vấn đề liên quan