SSH 연결에 기본 Ansible 사용자 이름 / 암호를 설정하는 방법은 무엇입니까?


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

참고 : Before Ansible 2.0 ansible_useransible_ssh_user입니다.


2
Ansible 2.0 이상에서는 다음과 같아야합니다. [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986 2

2
@ zx1986 어디서 읽었습니까?
030


의 기본 포트는 22 ansible_port이므로 다르지 않으면 명시 적으로 지정할 필요가 없습니다. 누구나 한 번에 둘 이상의 그룹에 변수를 적용하는 방법을 알고 있다면 ( '모두'아님) 관심이 있다면 쉼표 구분이 작동하지 않는 것 같습니다.
William Turrell

1
@WilliamTurrell 조금 늦었지만 .. : : children 수정자를 사용하여 그룹 그룹을 만든 다음 나중에 : vars 수정자를 사용하여 변수를 설정할 수 있습니다.
Lasse Halberg Haarbye

23

그룹 변수

Ansible의 Best Practices 문서에 지정된 플레이 북 레이아웃 을 사용하고 정의한 파일을 만들어 모든 호스트에 적용되는 변수를 설정할 수 있습니다 .group_vars/all

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

[편집] 그래도 당신이하려는 일에 혼란 스럽습니다. 인벤토리에서 Ansible 사용자 또는 비밀번호를 지정할 필요가 없습니다. Vagrant를 사용하는 경우 확실히 사용하지 않으며 명령 줄에서 Ansible을 호출하는 경우 사용자를 지정하고을 사용 --user=vagrant하여 비밀번호를 요청할 수 있습니다 --ask-pass.


1
인프라를 더 잘 구성하기 만하면됩니다. 항상 vagrant : vagrant를 사용하는 경우 Ansible이 기본적으로로드되는 위치에 구성을 지정하고 싶지만 어디에 있는지 모르겠습니다. 실행할 모든 연결은 사용해야합니다.
Robert

파일 이름을 지정해야 합니까 group_vars/all/main.yml아니면 단순히 group_vars/all
realtebo

이것은 설치 후 나를 위해 일했다 sshpass"you must install the sshpass program"
user9869932 18:49에

1
@realtebo 파일 이름을 지정해야합니다 group_vars/all.
xloto

1
ask pass에 대한 -k는 각 호스트에 다른 암호가있을 때 "모두"에게는 그리 재미 있지 않습니다. 예, sshpass가 필요하며 ~ \ .ssh \ config를 사용하기 전에 연결하지 않은 경우 known_hosts를 시드해야합니다.
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

의 경우 > = 2.0 Ansible :

[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에서만 테스트했습니다. 다양한 문서를 기반으로 다른 플랫폼에서 작동 할 것으로 기대합니다.

"프로젝트 디렉토리"는 Vagrant 프로젝트의 기본 디렉토리를 포함하는 디렉토리를 나타냅니다 Vagrantfile.

Vagrant가 자동 생성 한 Ansible Inventory 파일 :

Vagrant 는 기본 Ansible 연결 변수를 사용하여 인벤토리 파일만듭니다 . 에서 찾아보십시오 <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

이 파일은 필요에 따라 Vagrant에 의해 재생성되므로 수동 편집 내용을 덮어 씁니다. 그러나 Vagrant 문서에 따르면 여러 시스템, 그룹 변수 등을 지정할 수 있으며이 Vagrantfile인벤토리 파일에 추가됩니다.

이 인벤토리 파일을 기본값으로 설정하십시오.

이 파일을 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 사용 :

그런 다음 프로젝트 디렉토리에서에 ansible정의한 호스트에서 정상적으로 사용할 수 있어야합니다 Vagrantfile.

예를 들면 다음과 같습니다.

ansible slave -a 'hostname'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.