Skonfiguruj poświadczenia SSH dla każdego środowiska

10

Próbuję dowiedzieć się, jak skonfigurować poświadczenia SSH osobno dla środowiska produkcyjnego i testowego za pomocą Ansible. Rozumiem, że możesz skonfigurować adresy IP serwerów i nazwy hostów osobno, używając różnych plików spisu, przekazując argument -ilub --inventory-filedo ansible-playbookpolecenia. Nie widzę jednak takiej opcji dla ansible.cfg. Obecnie poświadczenia są dostępne /etc/ansible/ansible.cfgjako:

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

Jak mogę skonfigurować wiele poświadczeń SSH, jeden dla produkcji i jeden dla przemieszczania?

użytkownik369450
źródło
jakie zmiany między Twoimi środowiskami? Tylko plik klucza, a także użytkownik zdalny / użytkownik sudo?
tedder42
@ tedder42 Klucz prywatny SSH i użytkownik zdalny.
user369450
Dlaczego nie omówisz tego w swoim .ssh / config?
udondan
@udondan Czy istnieje sposób na określenie jednego klucza dla wielu hostów .ssh/config?
user369450
Tak, możesz to zrobić. Możesz utworzyć wiele grup z jawnymi nazwami hostów lub wzorcami. Pozwól, że opublikuję przykład w odpowiedzi.
udondan

Odpowiedzi:

16

Wydaje się, że moja pierwsza odpowiedź nie była całkowicie poprawna. Chociaż oczywiście można to rozwiązać w sposób .ssh/configopisany poniżej, wydaje się, że jest to również możliwe w przypadku parametrów inwentarza zachowań Ansibles .

Powinieneś (zgodnie z dokumentami) móc zdefiniować plik klucza i użytkownika w swoim ekwipunku, dla hosta lub grupy.

Definicja na 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

Definicja na hosta:

[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

Możesz jednak zdefiniować wiele grup hostów już w swojej .ssh/configgrupie, a każda grupa może mieć osobne ustawienia dotyczące klucza i użytkownika.

Oto szybki przykład

#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

Możesz również zdefiniować wartość domyślną i zastąpić ją później bardziej szczegółowymi ustawieniami.

Host *
  user defaut_username

Host somehost
  user special_username
udondan
źródło