Como definir o nome de usuário / senha padrão Ansible para a conexão SSH?

60

Estou usando o Ansible e tenho essa configuração no meu inventário / tudo:

[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

Não quero repetir todos os parâmetros para cada nova instância. Como posso configurá-los em um só lugar? Existe algum arquivo com esses parâmetros?

Robert
fonte
3
~/.ssh/config
ceejayoz
11
@ceejayoz Você poderia explicar um pouco
Robert
Eu não sou um administrador Ansible, e os documentos estão nublados sobre o assunto ( isso é uma "variável" ou um "parâmetro" e há alguma diferença? ), Mas parece que você pode definir variáveis ​​de alguma forma no nível do grupo.
DerfK 16/09

Respostas:

74

Você pode adicionar a seguinte seção ao seu arquivo de inventário:

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

Nota: Antes de Ansible 2.0 ansible_userfoi ansible_ssh_user.

Alexey Labzov
fonte
2
Acima Ansible 2.0, que deve ser: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986
2
@ zx1986 onde você leu isso?
030
2
@ 030 aqui: docs.ansible.com/ansible/…
zx1986
Observe que a porta 22 é o padrão para ansible_port, portanto, você não precisa especificá-la explicitamente, a menos que seja diferente. Interessado se alguém souber aplicar variáveis ​​a mais de um grupo por vez (mas não 'todos'), a separação por vírgula parece não funcionar.
precisa
11
@WilliamTurrell um pouco atrasado, mas você pode criar um grupo de grupos (com o modificador: children) e depois definir as variáveis ​​posteriormente (com o modificador: vars).
Lasse Halberg Haarbye
23

Variáveis ​​de grupo

Você pode definir variáveis ​​que se aplicam a todos os hosts usando o layout do manual especificado no documento de práticas recomendadas da Ansible e criando um group_vars/allarquivo onde você os define .

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

[editar] Mas estou confuso com o que você está tentando fazer. Você não precisa especificar o usuário ou senha Ansible no inventário. Se você estiver usando o Vagrant, definitivamente não o fará e, se estiver ligando para o Ansible, na linha de comando, você pode especificar o usuário --user=vagrante solicitar a senha --ask-pass.

Philip Wilson
fonte
11
Eu só preciso fazer uma melhor organização da minha infraestrutura. Se sempre vou usar vagrant: vagrant, quero colocar a configuração em algum lugar onde o Ansible carrega por padrão, mas não sei onde. Toda conexão a ser executada precisa usá-la.
Robert
O arquivo deve ser nomeado group_vars/all/main.ymlou simplesmente group_vars/all?
Realtebo 11/08
este funcionou para mim após a instalação sshpass-"you must install the sshpass program"
user9869932 5/11
11
@realtebo O arquivo deve ser nomeado group_vars/all.
xloto 22/03
11
-k for ask pass não é muito divertido para "todos" quando cada host tem uma senha diferente. Sim, você precisa do sshpass, e sim, provavelmente precisará propagar o know_hosts se você nunca se conectou antes ~ ~ .ssh \ config é o caminho a percorrer.
mckenzm
5

Eu acho que é melhor usar a instalação da chave ssh em todos os servidores através da atração. Você deve executar ssh-copy-id apenas por nó e instalar sua chave ssh em todos os lugares para que a ansible possa efetuar login usando sua chave ssh. Será mais seguro não salvar senhas no manual / inventário.

Para fazer isso, você deve gerar seu par de chaves ssh e executar o ssh-copy-id para todos os servidores posteriormente.

podarok
fonte
11
Se alguém puder roubar a senha do seu arquivo de configuração, provavelmente também poderá usar suas chaves ssh. E isso não tem nada a ver com responder à pergunta dos OPs. Esta pergunta não estava pedindo opiniões sobre alternativas.
Muh Fugen
@MuhFugen> Como posso configurá-los em um só lugar? Existe algum arquivo com esses parâmetros? Esta é uma frase exata que deixa a porta para a opinião, bem como a resposta, fornece uma compreensão da direção certa. Roubar a configuração (que poderia estar no repositório git em algum lugar) não é o mesmo que roubar a chave privada.
Podarok
4

Adicione abaixo aos hosts de inventário.

Para Ansible <2.0:

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

Para 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
fonte
O link menciona ansible_ssh_pass, não ansible_pass.
Matthias Weiler
2

Disclaimer: Eu só testei isso no OSX. Com base nos vários documentos, espero que funcione em outras plataformas.

"diretório do projeto" refere-se ao diretório base do projeto Vagrant - o diretório que contém Vagrantfile.

Arquivo Ansible Inventory gerado automaticamente pelo Vagrant:

O Vagrant cria um arquivo de inventário com os vars de conexão Ansible padrão. Procure por ele <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Este arquivo será regenerado pelo Vagrant conforme necessário, para que as edições manuais sejam substituídas. No entanto, de acordo com os documentos do Vagrant, você pode especificar várias máquinas, grupos de vars, etc., Vagrantfilee eles serão adicionados a esse arquivo de inventário.

Configure Ansible como padrão para este arquivo de inventário:

Para tornar esse arquivo o padrão usado pelo ansiblecomando quando você estiver no diretório do projeto (no host), adicione um ansible.cfgarquivo no diretório do projeto com este conteúdo, alterando o caminho conforme necessário:

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

Para confirmar que este arquivo de inventário está sendo usado, procure-o como o padrão relatado pelo ansible:

(de dentro do diretório do projeto)

$ 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

Para confirmar seus hosts:

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

Usando Ansible com estes hosts:

No diretório do projeto, você poderá usar ansiblenormalmente os hosts que você definiu Vagrantfile.

Por exemplo:

ansible slave -a 'hostname'
kentr
fonte