Konfigurasikan kredensial SSH per lingkungan

10

Saya mencoba mencari cara untuk mengkonfigurasi kredensial SSH secara terpisah untuk lingkungan produksi dan pementasan dengan Ansible. Saya memahami bahwa Anda dapat mengkonfigurasi alamat IP server dan nama host secara terpisah menggunakan file persediaan yang berbeda dengan melewati -iatau --inventory-fileargumen untuk ansible-playbookperintah. Namun, saya tidak melihat opsi seperti itu untuk ansible.cfg. Saat ini, kredensial tinggal /etc/ansible/ansible.cfgsebagai:

[defaults]
private_key_file=/home/caleb/.ssh/staging_key.pem
remote_user=ubuntu
sudo_user=root
gathering=explicit

Bagaimana saya bisa mengkonfigurasi beberapa kredensial SSH, satu untuk produksi dan satu untuk pementasan?

pengguna369450
sumber
perubahan apa di antara lingkungan Anda? Hanya file kunci, atau juga remote_user / sudo_user?
tedder42
@ tedder42 Kunci pribadi SSH dan remote_user.
user369450
Mengapa Anda tidak membahasnya di .ssh / config Anda?
udondan
@udondan Apakah ada cara untuk menentukan satu kunci sekali untuk beberapa host di .ssh/config?
user369450
Ya, Anda bisa melakukannya. Anda dapat membuat beberapa grup dengan nama host atau pola eksplisit. Biarkan saya memposting contoh dalam jawaban.
udondan

Jawaban:

16

Sepertinya jawaban pertama saya tidak sepenuhnya benar. Meskipun tentu saja mungkin untuk menyelesaikannya dalam .ssh/configseperti yang dijelaskan di bawah ini, tampaknya juga dimungkinkan dengan Parameter Inventaris Perilaku Ansibles .

Anda harus (menurut dokumen) dapat mendefinisikan keyfile dan pengguna dalam inventaris Anda, baik per host atau per grup.

Definisi per grup:

[some_hosts]
host1.foo
host2.foo

[some_hosts:vars]
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem

Definisi per host:

[some_hosts]
host1.foo     ansible_ssh_user=ubuntu          ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem
host2.foo     ansible_ssh_user=another_user    ansible_ssh_private_key_file=/home/caleb/.ssh/production_key.pem

Tetapi Anda dapat menentukan beberapa grup host di Anda .ssh/configdan setiap grup dapat memiliki pengaturan terpisah mengenai kunci dan pengguna.

Ini adalah contoh cepat

#Example with a wildcard
Host *.foo.com
  user ubuntu
  IdentityFile /home/caleb/.ssh/staging_key.pem

#Example with multiple hostnames
Host hostname.one hostname.two hostname.three
  user other_user
  IdentityFile /home/caleb/.ssh/production_key.pem

Anda juga dapat menetapkan default dan menimpanya nanti dengan pengaturan yang lebih rinci.

Host *
  user defaut_username

Host somehost
  user special_username
udondan
sumber