จะตั้งค่า host_key_checking = false ในไฟล์สินค้าคงคลังได้อย่างไร


113

ฉันต้องการใช้ansible-playbookคำสั่งแทน " vagrant provision" อย่างไรก็ตามการตั้งค่าhost_key_checking=falseในhostsไฟล์ดูเหมือนจะไม่ทำงาน

# 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

มีตัวแปรการกำหนดค่าภายนอกVagrantfileที่สามารถแทนที่ค่านี้ได้หรือไม่

คำตอบ:


182

เนื่องจากฉันได้ตอบคำถามนี้ในปี 2014 ฉันได้อัปเดตคำตอบของฉันในบัญชีสำหรับ ansible เวอร์ชันล่าสุด

ได้คุณสามารถทำได้ในระดับโฮสต์ / พื้นที่โฆษณา (ซึ่งเป็นไปได้ในเวอร์ชันที่ตอบได้ใหม่กว่า ) หรือระดับโลก:

สินค้าคงคลัง :

เพิ่มสิ่งต่อไปนี้

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

เจ้าภาพ :

เพิ่มสิ่งต่อไปนี้

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

ตัวเลือกเจ้าภาพ / สินค้าคงคลังที่จะทำงานร่วมกับประเภทการเชื่อมต่อและไม่ได้ssh paramikoบางคนอาจโต้แย้งอย่างรุนแรงว่าพื้นที่โฆษณาและโฮสต์มีความปลอดภัยมากกว่าเนื่องจากขอบเขตมี จำกัด มากขึ้น

ทั่วโลก:

คู่มือผู้ใช้ Ansible - การตรวจสอบคีย์โฮสต์

  • คุณสามารถทำได้ในไฟล์/etc/ansible/ansible.cfgหรือ~/.ansible.cfgไฟล์:

    [defaults]
    host_key_checking = False
    
  • หรือคุณสามารถตั้งค่าและตัวแปร env (อาจใช้ไม่ได้กับเวอร์ชันที่ใหม่กว่าที่สามารถตอบได้):

    export ANSIBLE_HOST_KEY_CHECKING=False
    

32
ฉันใช้ ansible 1.7.2 และประสบการณ์ของฉันพบว่าตัวแปรสภาพแวดล้อมANSIBLE_HOST_KEY_CHECKINGทำงาน แต่-e 'host_key_checking=False'ไม่ทำงาน
Marc Abramowitz

6
ข้อความแรกของคุณ "ใช่ แต่ไม่ใช่ในระดับโฮสต์ / พื้นที่โฆษณา" เป็นเท็จ คุณสามารถใช้ansible_ssh_common_args='-o StrictHostKeyChecking=no'หรือansible_ssh_extra_args='-o StrictHostKeyChecking=no'
ชัมเมลลี

1
ตัวเลือกสุดท้ายเท่านั้นที่ใช้ได้สำหรับฉัน (ส่งออก ANSIBLE_HOST_KEY_CHECKING = False) ก่อนที่จะเรียกใช้ playbook ของฉัน
ted-k42

1
"ใช่ แต่ไม่ใช่ในระดับโฮสต์ / พื้นที่โฆษณา" - แสดงให้เห็นว่าเป็นเท็จพิสูจน์โดยคำตอบของฉัน ฉันจะบอกว่านี่ไม่ใช่คำตอบสำหรับคำถามเกี่ยวกับวิธีตั้งค่าในระดับสินค้าคงคลัง
gertvdijk

@gertvdijk ฉันตอบสิ่งนี้ในปี 2014 Ansible ได้ผ่านการแก้ไขมากมาย นั่นไม่ใช่กรณีอีกต่อไป?
Rico

68

ได้คุณสามารถตั้งค่านี้ในระดับพื้นที่โฆษณา / โฮสต์

ด้วยคำตอบที่ยอมรับแล้วในปัจจุบันฉันคิดว่านี่เป็นคำตอบที่ดีกว่าสำหรับคำถามเกี่ยวกับวิธีจัดการสิ่งนี้ในระดับสินค้าคงคลัง ฉันคิดว่าสิ่งนี้ปลอดภัยมากขึ้นโดยการแยกการตั้งค่าที่ไม่ปลอดภัยนี้ไปยังโฮสต์ที่จำเป็นสำหรับสิ่งนี้ (เช่นระบบทดสอบเครื่องพัฒนาในพื้นที่)

สิ่งที่คุณสามารถทำได้ในระดับสินค้าคงคลังคือเพิ่ม

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

หรือ

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

ตามนิยามโฮสต์ของคุณ (ดูที่Ansible Behavioral Inventory Parameters )

สิ่งนี้จะได้ผลหากคุณใช้sshประเภทการเชื่อมต่อไม่ใช่paramikoหรืออย่างอื่น)

ตัวอย่างเช่นคำจำกัดความของโฮสต์ Vagrant จะมีลักษณะดังนี้ ...

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

หรือ

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

จากนั้นการรัน Ansible จะประสบความสำเร็จโดยไม่ต้องเปลี่ยนแปลงตัวแปรสภาพแวดล้อมใด ๆ

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

ในกรณีที่คุณต้องการทำสิ่งนี้ให้กับกลุ่มโฮสต์นี่คือคำแนะนำในการทำให้เป็นกลุ่มเสริมสำหรับกลุ่มที่มีอยู่ดังนี้:

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

[insecuressh:children]
mytestsystems

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

4
นี่คือคำตอบที่ดีกว่ามาก
marcv81

ข้อเสนอแนะนี้ใช้ได้ผลสำหรับฉันและฉันยอมรับว่านี่เป็นสิ่งที่ควรกำหนดในระดับโครงการ (แทนที่จะเป็นระดับโลก) เนื่องจากปัญหาด้านความปลอดภัย
andrewdcato

1
ฉันรวมอยู่ansible_ssh_common_args: '-o StrictHostKeyChecking=no'ในไฟล์ yml ไฟล์ group_vars
ก.

4

ฉันไม่สามารถใช้:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ในไฟล์สินค้าคงคลัง ดูเหมือนว่า ansible จะไม่พิจารณาตัวเลือกนี้ในกรณีของฉัน (ansible 2.0.1.0 จาก pip ใน ubuntu 14.04)

ฉันตัดสินใจใช้:

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

มันช่วยฉัน

นอกจากนี้คุณสามารถตั้งค่าตัวแปรนี้เป็นกลุ่มแทนสำหรับแต่ละโฮสต์:

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

การตั้งค่าUserKnownHostsFile/ GlobalKnownHostsFileoption ให้ใช้/dev/nullงานได้จริง เป็นเรื่องแปลกที่การตั้งค่าStrictHostKeyCheckingไม่ได้ผลสำหรับคุณ ส่วนใหญ่เป็นตัวเลือกบางอย่างในการกำหนดค่า SSH ของคุณสาเหตุ
gertvdijk

+1 สำหรับ-o UserKnownHostsFile=/dev/null. หากไม่มีมันก็ไม่ได้ผลสำหรับฉันโดยไม่คำนึงถึงสถานที่และวิธีที่ฉันระบุansible_ssh_common_args ไว้ในคำตอบอื่น ๆ
จนถึง

0

ในการ/etc/ansible/ansible.cfgยกเลิกการแสดงความคิดเห็นบรรทัด:

host_key_check = False

และไม่ใส่/etc/ansible/hostsข้อคิดเห็นในบรรทัด

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

นั่นคือทั้งหมด


0

การเพิ่มสิ่งต่อไปนี้ใน ansible config ทำงานได้ในขณะที่ใช้คำสั่ง ansible ad-hoc:

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

รุ่น Ansible

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

0

คุณตั้งค่าคอนฟิกเหล่านี้ในไฟล์/etc/ansible/ansible.cfgหรือ~/.ansible.cfgหรือansible.cfg(ในไดเร็กทอรีปัจจุบันของคุณ)

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

ทดสอบด้วย ansible 2.9.6 ใน ubuntu 20.04

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.