2015-08-30 13 views
77

Có cách nào để bỏ qua kiểm tra tính xác thực SSH do Ansible thực hiện không? Ví dụ: khi tôi vừa thiết lập máy chủ mới, tôi phải trả lời có cho câu hỏi này:Làm cách nào để bỏ qua việc kiểm tra tính xác thực SSH an toàn?

GATHERING FACTS *************************************************************** 
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. 
RSA key fingerprint is xx:yy:zz:.... 
Are you sure you want to continue connecting (yes/no)? 

Tôi biết rằng đây là một ý tưởng tồi nhưng tôi kết hợp điều này trong tập lệnh trước tiên tạo mới máy chủ ảo tại nhà cung cấp dịch vụ đám mây của tôi và sau đó tự động gọi tới playbook ansible của tôi để định cấu hình nó. Tôi muốn tránh bất kỳ sự can thiệp của con người vào giữa việc thực thi kịch bản.

Trả lời

117

Hai tùy chọn - đầu tiên, như bạn đã nói trong câu trả lời của riêng bạn, đang đặt biến môi trường ANSIBLE_HOST_KEY_CHECKING thành Sai. Cách thứ hai để đặt nó là đặt nó vào một tệp ansible.cfg, và đó là một lựa chọn thực sự hữu ích bởi vì bạn có thể thiết lập toàn cầu (ở mức hệ thống hoặc người dùng, trong /etc/ansible/ansible.cfg hoặc ~/.ansible.cfg), hoặc trong một tệp cấu hình trong cùng thư mục với sách bạn đang chạy.

Để làm điều đó, tạo một file ansible.cfg tại một trong những địa điểm, và bao gồm này:

[defaults] 
host_key_checking = False 

Bạn cũng có thể đặt rất nhiều giá trị mặc định có ích khác ở đó, như có hay không để thu thập sự kiện tại bắt đầu một vở kịch, cho dù hợp nhất các băm được khai báo ở nhiều nơi hay thay thế bằng một vị trí khác, v.v. Có một danh sách lớn các tùy chọn here trong tài liệu Ansible.


Chỉnh sửa: ghi chú về bảo mật.

Xác thực khóa máy chủ SSH là lớp bảo mật có ý nghĩa cho máy chủ liên tục - nếu bạn đang kết nối với cùng một máy nhiều lần, bạn nên chấp nhận khóa máy chủ cục bộ.

Đối với EC2 còn sống, nó sẽ làm cho tinh thần để chấp nhận chìa khóa máy với một nhiệm vụ chạy chỉ một lần trên tạo ban đầu của dụ:

- name: Write the new ec2 instance host key to known hosts 
    connection: local 
    shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts" 

Không có giá trị bảo đảm cho việc kiểm tra host key trên các trường hợp bạn đứng lên động và xóa ngay sau khi thực thi playbook, nhưng có giá trị bảo mật trong việc kiểm tra các khóa máy chủ cho các máy liên tục. Vì vậy, bạn nên quản lý việc kiểm tra khóa máy chủ khác nhau theo môi trường logic.

  • Để lại việc kiểm tra được kích hoạt theo mặc định (trong ~/.ansible.cfg)
  • Disable chính chủ kiểm tra trong thư mục làm việc cho playbooks bạn chạy chống lại các trường hợp phù du (./ansible.cfg cùng với playbook cho unit tests chống lại lang thang máy ảo, tự động hóa cho ngắn ngủi eC2)
+5

Bất kỳ ai biết thực hành tốt nhất là những gì ở đây? Ví dụ, bạn có thể chạy một kịch bản định kỳ để đặt lại các máy chủ đã biết của bạn, điều này sẽ an toàn hơn (trừ khi bị tấn công MITM làm mờ cửa sổ đó). Bỏ qua tính xác thực theo mặc định loại bỏ một trong các cơ chế bảo mật chính của SSH – TonyH

+3

Tôi thích mẫu mà nhóm của tôi sử dụng: chúng tôi đặt các tệp ansible.cfg vô hiệu hóa kiểm tra khóa máy chủ trong các thư mục hoạt động cho sách chơi chúng tôi chạy chống lại các phiên bản tạm thời (các kiểm tra đơn vị chạy trên máy ảo lang thang) , AWS ec2 trường hợp, vv) và để kiểm tra được kích hoạt ở cấp hệ thống. – nikobelia

+1

Bằng cách đó, bạn có thể quản lý việc kiểm tra khóa máy chủ * trên mỗi môi trường logic *. Không có giá trị bảo mật nào để kiểm tra các khóa máy chủ trên các cá thể mà bạn đứng lên động và xóa ngay sau khi thực thi playbook, nhưng có giá trị bảo mật trong việc kiểm tra các khóa máy chủ cho các máy liên tục. Vì vậy, bạn nên có các mặc định khác nhau cho các trường hợp sử dụng khác nhau. – nikobelia

17

Tôi đã tìm thấy câu trả lời, bạn cần đặt biến môi trường ANSIBLE_HOST_KEY_CHECKING thành False. Ví dụ:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ... 
1

mong muốn nikobelia

Đối với những người sử dụng Jenkins để chạy các cuốn sách vở kịch, tôi chỉ bổ sung vào công việc của tôi trước khi Jenkins chạy ansible-playbook biến ông môi trường ANSIBLE_HOST_KEY_CHECKING = False Ví dụ này:

export ANSIBLE_HOST_KEY_CHECKING=False 
ansible-playbook 'playbook.yml' \ 
--extra-vars="some vars..." \ 
--tags="tags_name..." -vv 
Các vấn đề liên quan