จะตั้งค่า Ansible ชื่อผู้ใช้ / รหัสผ่านเริ่มต้นสำหรับการเชื่อมต่อ SSH ได้อย่างไร?


60

ฉันใช้ Ansible และฉันมีการกำหนดค่านี้ในสินค้าคงคลังของฉัน / ทั้งหมด:

[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[all:children]
master
slave

ฉันไม่ต้องการทำซ้ำพารามิเตอร์ทั้งหมดสำหรับแต่ละอินสแตนซ์ใหม่ ฉันจะกำหนดค่าพวกเขาในที่เดียวได้อย่างไร มีไฟล์ใดที่มีพารามิเตอร์เหล่านี้หรือไม่


3
~/.ssh/config
ceejayoz

1
@ceejayoz คุณช่วยอธิบายหน่อยได้ไหม
Robert

ฉันไม่ใช่ผู้ดูแลระบบ Ansible และเอกสารมีเมฆมากในเรื่อง ( นี่คือ "ตัวแปร" หรือ "พารามิเตอร์" และมีความแตกต่างหรือไม่? ) แต่ดูเหมือนว่าคุณสามารถกำหนดตัวแปรในระดับกลุ่มได้
DerfK

คำตอบ:


74

คุณสามารถเพิ่มส่วนต่อไปนี้ในไฟล์คลังโฆษณาของคุณ:

[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant

หมายเหตุ:ก่อนที่จะเบิ้ล 2.0 เป็นansible_useransible_ssh_user


2
เหนือ Ansible 2.0 ควรเป็น: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986

2
@ zx1986 คุณอ่านมาจากไหน
030

2
@ 030 ที่นี่: docs.ansible.com/ansible/…
zx1986

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

1
@WilliamTurrell ช้าไปหน่อย แต่ .. คุณสามารถสร้างกลุ่มของกลุ่ม (ด้วย: children modifier) ​​แล้วตั้งค่าตัวแปรหลังจากนั้น (ด้วย: vars modifier)
Lasse Halberg Haarbye

23

ตัวแปรกลุ่ม

คุณสามารถตั้งค่าตัวแปรที่ใช้กับทุกครอบครัวโดยใช้รูปแบบ PlayBookที่ระบุไว้ในเบิ้ลของBest Practicesเอกสารและการสร้างgroup_vars/allไฟล์ที่คุณกำหนดให้

---
# file: group_vars/all
ansible_connection: ssh 
ansible_ssh_user: vagrant 
ansible_ssh_pass: vagrant

[แก้ไข] ฉันสับสนในสิ่งที่คุณพยายามทำ คุณไม่จำเป็นต้องระบุผู้ใช้ Ansible หรือรหัสผ่านในสินค้าคงคลัง หากคุณกำลังใช้จรจัดคุณแน่นอนไม่ได้และถ้าคุณกำลังเรียกเบิ้ลจากบรรทัดคำสั่งคุณสามารถระบุผู้ใช้ที่มีและมีมันถามรหัสผ่านด้วย--user=vagrant--ask-pass


1
ฉันต้องการทำโครงสร้างองค์กรให้ดีขึ้นเท่านั้น ถ้าฉันจะใช้คนจรจัดเสมอ: คนจรจัดฉันต้องการตั้งค่าในบางสถานที่ซึ่งโหลด Ansible เป็นค่าเริ่มต้น แต่ไม่รู้ว่าที่ไหน ทุกการเชื่อมต่อที่จะดำเนินการจะต้องใช้มัน
Robert

ต้องตั้งชื่อไฟล์group_vars/all/main.ymlหรือเพียงแค่group_vars/all?
realtebo

อันนี้ใช้งานได้สำหรับฉันหลังจากติดตั้งsshpass-"you must install the sshpass program"
user9869932

1
@realtebo group_vars/allไฟล์ที่จะต้องมีชื่อ
xloto

1
-k สำหรับการขอรหัสผ่านนั้นไม่สนุกสำหรับ "ทั้งหมด" เมื่อแต่ละโฮสต์มีรหัสผ่านที่แตกต่างกัน ใช่คุณต้องการ sshpass และใช่คุณอาจต้องรู้จัก known_hosts หากคุณไม่เคยเชื่อมต่อมาก่อน ~ \ .ssh \ config เป็นวิธีที่จะไป
mckenzm

5

ฉันคิดว่ามันเป็นการดีกว่าที่จะใช้การติดตั้งคีย์ ssh บนเซิร์ฟเวอร์ทั้งหมดในการดึง คุณควรรัน ssh-copy-id ต่อโหนดและติดตั้งคีย์ ssh ของคุณทุกที่เพื่อให้สามารถเข้าสู่ระบบได้โดยใช้คีย์ ssh ของคุณ มันจะปลอดภัยมากกว่าหากไม่บันทึกรหัสผ่านลงในเพลย์บุ๊ค / คลัง

ในการทำเช่นนี้คุณควรสร้างคู่คีย์ ssh และเรียกใช้ ssh-copy-id สำหรับเซิร์ฟเวอร์ทั้งหมดหลังจากนั้น


1
หากใครบางคนสามารถขโมยรหัสผ่านจากไฟล์กำหนดค่าของคุณพวกเขาก็อาจจะสามารถใช้คีย์ ssh ของคุณได้เช่นกัน และสิ่งนี้ไม่มีอะไรเกี่ยวข้องกับการตอบคำถาม OPs คำถามนี้ไม่ได้ถามความคิดเห็นเกี่ยวกับทางเลือกอื่น
Muh Fugen

@MuhFugen> ฉันจะกำหนดค่าได้อย่างไรในที่เดียว มีไฟล์ใดที่มีพารามิเตอร์เหล่านี้หรือไม่ นี่คือวลีที่แน่นอนซึ่งออกจากประตูสำหรับความคิดเห็นเช่นเดียวกับการตอบสนองให้ความเข้าใจในทิศทางที่ถูกต้อง การกำหนดค่าขโมย (อาจมีอยู่ใน git repo ที่อื่น) ไม่เหมือนกับการขโมยรหัสส่วนตัว
podarok

4

เพิ่มด้านล่างลงในโฮสต์ของพื้นที่โฆษณา

สำหรับ Ansible <2.0:

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant 
ansible_ssh_pass=vagrant

สำหรับ Ansible> = 2.0 :

[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant

กล่าวถึงการเชื่อมโยงไม่ansible_ssh_pass ansible_pass
Matthias Weiler

2

ข้อจำกัดความรับผิดชอบ: ฉันทดสอบเฉพาะใน OSX เท่านั้น จากเอกสารต่าง ๆ ฉันคาดว่ามันจะทำงานบนแพลตฟอร์มอื่น ๆ

directory "โครงการ" หมายถึงไดเรกทอรีฐานสำหรับโครงการจรจัด - Vagrantfileไดเรกทอรีที่มี

ไฟล์สินค้าคงคลังที่สร้างโดยอัตโนมัติโดย Vagrant:

Vagrant สร้างไฟล์สินค้าคงคลังด้วยค่าเริ่มต้นการเชื่อมต่อ Ansible มองหามัน<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventoryค่ะ

ไฟล์นี้จะถูกสร้างใหม่โดย Vagrant ตามต้องการดังนั้นการแก้ไขด้วยตนเองจะถูกเขียนทับ อย่างไรก็ตามตามเอกสาร Vagrant คุณสามารถระบุเครื่องหลายเครื่องกลุ่ม vars และอื่น ๆ ในVagrantfileและพวกเขาจะถูกเพิ่มลงในไฟล์สินค้าคงคลังนี้

กำหนดค่า Ansible เป็นค่าเริ่มต้นสำหรับไฟล์คลังโฆษณานี้:

ในการทำให้ไฟล์นี้เป็นค่าเริ่มต้นที่ใช้โดยansibleคำสั่งเมื่อคุณอยู่ในไดเรกทอรีโครงการ (บนโฮสต์) ให้เพิ่มansible.cfgไฟล์ในไดเรกทอรีโครงการของคุณด้วยเนื้อหาเหล่านี้โดยเปลี่ยนเส้นทางตามต้องการ:

[defaults]
inventory = ./path/to/inventory

หากต้องการยืนยันว่ามีการใช้ไฟล์คลังข้อมูลนี้อยู่ให้มองหาเป็นค่าเริ่มต้นที่รายงานโดย ansible:

(จากภายในไดเรกทอรีโครงการ)

$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or

วิธียืนยันโฮสต์ของคุณ:

$ ansible all --list-hosts hosts (2): master slave

การใช้ Ansible กับโฮสต์เหล่านี้:

จากภายในไดเรกทอรีโครงการแล้วคุณควรจะสามารถใช้งานได้ตามปกติกับครอบครัวที่คุณกำหนดไว้ใน ansibleVagrantfile

ตัวอย่างเช่น:

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