Làm cách nào để đặt host_key_checking = false trong tệp khoảng không quảng cáo ansible?


113

Tôi muốn sử dụng ansible-playbooklệnh thay vì ' vagrant provision'. Tuy nhiên, thiết lập host_key_checking=falsetrong hoststệp dường như không hoạt động.

# hosts file
vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key 
ansible_ssh_user=vagrant ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1 
host_key_checking=false

Có biến cấu hình nào bên ngoài Vagrantfilecó thể ghi đè giá trị này không?

Câu trả lời:


182

Do thực tế là tôi đã trả lời câu hỏi này vào năm 2014, tôi đã cập nhật câu trả lời của mình để tính cho các phiên bản mới hơn của ansible.

Có, bạn có thể làm điều đó ở cấp độ máy chủ / khoảng không quảng cáo (Điều này có thể thực hiện được trên các phiên bản mới hơn ) hoặc cấp độ toàn cầu:

hàng tồn kho :

Thêm những điều sau.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

chủ nhà :

Thêm những điều sau.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

tùy chọn máy chủ / khoảng không quảng cáo sẽ hoạt động với loại kết nối sshvà không paramiko. Một số người có thể phản đối gay gắt rằng khoảng không quảng cáo và máy chủ lưu trữ an toàn hơn vì phạm vi hạn chế hơn.

toàn cầu:

Hướng dẫn Sử dụng Ansible - Kiểm tra Khóa Máy chủ

  • Bạn có thể làm điều đó trong tệp /etc/ansible/ansible.cfghoặc ~/.ansible.cfgtệp:

    [defaults]
    host_key_checking = False
    
  • Hoặc bạn có thể thiết lập và biến env (điều này có thể không hoạt động trên các phiên bản mới hơn có thể xem được):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

32
Tôi đang sử dụng ansible 1.7.2 và kinh nghiệm của tôi là biến môi trường ANSIBLE_HOST_KEY_CHECKINGhoạt động nhưng -e 'host_key_checking=False'không hoạt động.
Marc Abramowitz

6
Tuyên bố đầu tiên của bạn "Có, nhưng không phải ở cấp máy chủ / khoảng không quảng cáo" là sai. Bạn có thể sử dụng ansible_ssh_common_args='-o StrictHostKeyChecking=no'hoặcansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee

1
Chỉ có tùy chọn cuối cùng phù hợp với tôi (xuất ANSIBLE_HOST_KEY_CHECKING = False) trước khi chạy playbook của tôi.
ted-k42,

1
"Có, nhưng không phải ở cấp máy chủ / khoảng không quảng cáo." - Được chứng minh là sai, được chứng minh bằng câu trả lời của tôi . Tôi thậm chí muốn nói rằng đây không thực sự là câu trả lời cho câu hỏi về cách đặt nó ở mức khoảng không quảng cáo .
gertvdijk

@gertvdijk Tôi đã trả lời điều này vào năm 2014. Ansible đã trải qua một loạt các bản sửa đổi. Đó không phải là trường hợp nữa?
Rico

68

Có, bạn có thể đặt điều này ở cấp khoảng không quảng cáo / máy chủ.

Với câu trả lời đã được chấp nhận hiện tại, tôi nghĩ đây là câu trả lời tốt hơn cho câu hỏi về cách xử lý điều này ở cấp độ hàng tồn kho. Tôi coi điều này an toàn hơn bằng cách cô lập cài đặt không an toàn này với các máy chủ cần thiết cho việc này (ví dụ: hệ thống thử nghiệm, máy phát triển cục bộ).

Những gì bạn có thể làm ở cấp khoảng không quảng cáo là thêm

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

hoặc là

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

vào định nghĩa máy chủ lưu trữ của bạn (xem Thông số khoảng không quảng cáo hành vi Ansible ).

Điều này sẽ hoạt động với điều kiện bạn sử dụng sshloại kết nối, không phải paramikohoặc thứ gì khác).

Ví dụ: định nghĩa máy chủ lưu trữ Vagrant sẽ giống như…

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_common_args='-o StrictHostKeyChecking=no'

hoặc là

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Chạy Ansible sau đó sẽ thành công mà không cần thay đổi bất kỳ biến môi trường nào.

$ ansible vagrant -i <path/to/hosts/file> -m ping
vagrant | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Trong trường hợp bạn muốn làm điều này cho một nhóm máy chủ, đây là một gợi ý để đặt nó thành var nhóm bổ sung cho một nhóm hiện có như thế này:

[mytestsystems]
test[01:99].example.tld

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'

4
Đây là một câu trả lời tốt hơn nhiều.
marcv81

Đề xuất này phù hợp với tôi và tôi đồng ý rằng đây là thứ nên được đặt ở cấp độ dự án (thay vì cấp độ toàn cầu) vì lo ngại về bảo mật.
andrewdcato

1
Tôi đã đưa ansible_ssh_common_args: '-o StrictHostKeyChecking=no'vào tệp yml tệp group_vars.
g.

4

Tôi không thể sử dụng:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

trong tệp hàng tồn kho. Có vẻ như ansible không xem xét tùy chọn này trong trường hợp của tôi (ansible 2.0.1.0 từ pip trong ubuntu 14.04)

Tôi quyết định sử dụng:

server ansible_host=192.168.1.1 ansible_ssh_common_args= '-o UserKnownHostsFile=/dev/null'

Nó đã giúp đỡ tôi.

Ngoài ra, bạn có thể đặt biến này theo nhóm thay cho từng máy chủ:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'

Đặt tùy chọn UserKnownHostsFile/ GlobalKnownHostsFilethành /dev/nullcũng thực sự hoạt động. Thật lạ là cài đặt StrictHostKeyCheckingkhông hoạt động với bạn. Rất có thể là một số tùy chọn trong cấu hình SSH của bạn là nguyên nhân.
gertvdijk

+1 cho -o UserKnownHostsFile=/dev/null. Nếu không có nó cũng không hiệu quả với tôi, bất kể vị trí và cách tôi chỉ định ansible_ssh_common_args đã nêu trong các câu trả lời khác.
Đến

0

Trong /etc/ansible/ansible.cfgbỏ ghi chú dòng:

host_key_check = False

/etc/ansible/hostsbỏ ghi chú dòng

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

Đó là tất cả


0

Việc thêm sau vào cấu hình ansible hoạt động trong khi sử dụng các lệnh ad-hoc không thể trả lời:

[ssh_connection]
# ssh arguments to use
ssh_args = -o StrictHostKeyChecking=no

Phiên bản Ansible

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg

0

Bạn đặt các cấu hình này trong tệp /etc/ansible/ansible.cfghoặc ~/.ansible.cfghoặc ansible.cfg(trong thư mục hiện tại của bạn)

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

đã thử nghiệm với ansible 2.9.6 trong ubuntu 20.04

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.