Bagaimana cara mengatur nama pengguna / kata sandi yang dimungkinkan untuk koneksi SSH?

60

Saya menggunakan Ansible dan saya memiliki konfigurasi ini di inventaris saya / semua:

[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

Saya tidak ingin mengulangi semua parameter untuk setiap instance baru. Bagaimana saya bisa mengonfigurasinya hanya di satu tempat? Apakah ada file dengan parameter ini?

Robert
sumber
3
~/.ssh/config
ceejayoz
1
@ceejayoz Bisakah Anda jelaskan sedikit
Robert
Saya bukan admin Ansible, dan dokumen mendung pada subjek ( apakah ini "variabel" atau "parameter" dan apakah ada perbedaan? ) Tetapi sepertinya Anda dapat menentukan variabel di level grup.
DerfK

Jawaban:

74

Anda dapat menambahkan bagian berikut ke file inventaris Anda:

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

Catatan: Sebelum Ansible 2.0 ansible_usertadinya ansible_ssh_user.

Alexey Labzov
sumber
2
Di atas Ansible 2.0, seharusnya: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986
2
@ zx1986 di mana Anda membacanya?
030
2
@ 030 di sini: docs.ansible.com/ansible/…
zx1986
Perhatikan bahwa port 22 adalah default untuk ansible_port, jadi Anda tidak perlu menentukannya secara eksplisit kecuali berbeda. Tertarik jika ada yang tahu cara menerapkan variabel ke lebih dari satu grup pada satu waktu (tetapi tidak 'semua'), pemisahan koma tampaknya tidak berhasil.
William Turrell
1
@ WilliamTurrell sedikit terlambat tapi .. Anda dapat membuat grup kelompok (dengan: anak pengubah) dan kemudian mengatur variabel sesudahnya (dengan: pengubah vars).
Lasse Halberg Haarbye
23

Variabel Grup

Anda dapat mengatur variabel yang berlaku untuk semua host dengan menggunakan tata letak playbook yang ditentukan dalam dokumen Praktik Terbaik Ansible dan membuat group_vars/allfile tempat Anda mendefinisikannya .

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

[edit] Namun saya bingung dengan apa yang Anda coba lakukan. Anda tidak perlu menentukan pengguna atau kata sandi yang mungkin dalam inventaris. Jika Anda menggunakan Vagrant, Anda pasti tidak, dan jika Anda menelepon Ansible dari baris perintah, Anda dapat menentukan pengguna dengan --user=vagrantdan meminta pengguna untuk memasukkan kata sandi --ask-pass.

Philip Wilson
sumber
1
Saya hanya perlu melakukan organisasi infrastruktur yang lebih baik. Jika selalu saya akan menggunakan gelandangan: gelandangan saya ingin meletakkannya konfigurasi di beberapa tempat di mana mungkin memuat secara default, tapi saya tidak tahu di mana. Setiap koneksi yang akan dieksekusi harus menggunakannya.
Robert
Haruskah file diberi nama group_vars/all/main.ymlatau sederhananya group_vars/all?
realtebo
yang ini bekerja untuk saya setelah menginstal sshpass-"you must install the sshpass program"
user9869932
1
@ realtebo File harus diberi nama group_vars/all.
xloto
1
-k untuk meminta izin tidak terlalu menyenangkan untuk "semua" ketika setiap host memiliki kata sandi yang berbeda. Ya, Anda perlu sshpass, dan ya Anda mungkin perlu menambal diketahui_hosting jika Anda belum pernah terhubung sebelumnya ~ \ .ssh \ config adalah jalan yang harus ditempuh.
mckenzm
5

Saya pikir lebih baik menggunakan instalasi kunci ssh ke semua server di tarikan. Anda harus menjalankan ssh-copy-id hanya per node dan menginstal kunci ssh Anda di mana saja untuk kemampuan yang memungkinkan untuk login menggunakan kunci ssh Anda. Akan lebih aman untuk tidak menyimpan kata sandi ke dalam buku pedoman / inventaris.

Untuk melakukan ini, Anda harus membuat pasangan kunci ssh Anda dan menjalankan ssh-copy-id untuk semua server sesudahnya.

podarok
sumber
1
Jika seseorang dapat mencuri kata sandi dari file konfigurasi Anda, kemungkinan besar mereka juga dapat menggunakan kunci ssh Anda. Dan ini sama sekali tidak ada hubungannya dengan menjawab pertanyaan OP. Pertanyaan ini tidak menanyakan pendapat tentang alternatif.
Muh Fugen
@MuhFugen> Bagaimana cara mengonfigurasinya hanya di satu tempat? Apakah ada file dengan parameter ini? Ini adalah frasa yang tepat yang meninggalkan pintu untuk pendapat serta respon memberikan pemahaman tentang arah yang benar. Mencuri konfigurasi (yang bisa hidup di git repo di suatu tempat) tidak sama dengan mencuri kunci pribadi.
podarok
4

Tambahkan di bawah ini ke host inventaris.

Untuk Ansible <2.0:

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

For 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
Mithril
sumber
Tautan itu menyebutkan ansible_ssh_pass, bukan ansible_pass.
Matthias Weiler
2

Penafian: Saya hanya menguji ini pada OSX. Berdasarkan berbagai dokumen, saya berharap ini berfungsi pada platform lain.

"direktori proyek" merujuk ke direktori dasar untuk proyek Vagrant - direktori yang berisi Vagrantfile.

File Inventaris yang dimungkinkan dihasilkan secara otomatis oleh Vagrant:

Vagrant membuat file inventaris dengan vars koneksi Ansible default. Mencarinya di <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

File ini akan dibuat ulang oleh Vagrant sesuai kebutuhan, sehingga pengeditan manual akan ditimpa. Namun, menurut dokumen Vagrant, Anda dapat menentukan beberapa mesin, vars grup, dll, Vagrantfiledan mereka akan ditambahkan ke file inventaris ini.

Konfigurasikan Dapat default ke file inventaris ini:

Untuk menjadikan file ini sebagai default yang digunakan oleh ansibleperintah ketika Anda berada di direktori proyek (di host), tambahkan ansible.cfgfile di direktori proyek Anda dengan konten ini, mengubah jalur yang diperlukan:

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

Untuk mengonfirmasi bahwa file inventaris ini digunakan, cari sebagai default yang dilaporkan oleh ansible:

(dari dalam direktori proyek)

$ 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

Untuk mengonfirmasi host Anda:

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

Menggunakan Ansible dengan host ini:

Dari dalam direktori proyek, Anda kemudian dapat menggunakan ansibleseperti biasa dengan host yang Anda tentukan Vagrantfile.

Sebagai contoh:

ansible slave -a 'hostname'
kentr
sumber