Configurar credenciais SSH por ambiente

10

Estou tentando descobrir como configurar as credenciais SSH separadamente para um ambiente de produção e armazenamento temporário com o Ansible. Entendo que você pode configurar os endereços IP e os nomes de host do servidor separadamente, usando diferentes arquivos de inventário, passando o argumento -iou --inventory-filepara o ansible-playbookcomando No entanto, não vejo essa opção para ansible.cfg. Atualmente, as credenciais vivem /etc/ansible/ansible.cfgcomo:

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

Como posso configurar várias credenciais SSH, uma para produção e outra para preparação?

user369450
fonte
o que muda entre seus ambientes? Apenas o arquivo de chave ou também o remote_user / sudo_user?
tedder42
@ tedder42 A chave privada SSH e o remote_user.
usar o seguinte comando
Por que você não cobre isso no seu .ssh / config?
Udondan
@udondan Existe uma maneira de especificar uma única chave uma vez para vários hosts .ssh/config?
user369450
Sim, você pode fazer isso. Você pode criar vários grupos com nomes de host ou padrões explícitos. Deixe-me postar um exemplo em uma resposta.
Udondan

Respostas:

16

Parece que minha primeira resposta não estava totalmente correta. Embora, é claro, seja possível resolvê-lo .ssh/configcomo descrito abaixo, também parece possível com os Parâmetros de inventário comportamental dos Ansibles .

Você deve (de acordo com a documentação) definir o arquivo de chave e o usuário em seu inventário, por host ou por grupo.

Definição por grupo:

[some_hosts]
host1.foo
host2.foo

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

Definição por 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

Mas você pode definir vários grupos de hosts já existentes no seu .ssh/confige cada grupo pode ter suas configurações separadas em relação à chave e ao usuário.

Aqui está um exemplo rápido

#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

Também é possível definir um padrão e substituí-lo posteriormente com configurações mais detalhadas.

Host *
  user defaut_username

Host somehost
  user special_username
udondan
fonte