the - Especificando la clave ssh en el archivo de libro de juego ansible
ansible user (3)
El nombre de la variable que está buscando es ansible_ssh_private_key_file
.
Deberías configurarlo en el nivel ''vars'':
en el archivo de inventario:
myHost ansible_ssh_private_key_file=~/.ssh/mykey1.pem myOtherHost ansible_ssh_private_key_file=~/.ssh/mykey2.pem
en el
host_vars
:# hosts_vars/myHost.yml ansible_ssh_private_key_file: ~/.ssh/mykey1.pem # hosts_vars/myOtherHost.yml ansible_ssh_private_key_file: ~/.ssh/mykey2.pem
en un archivo
group_vars
si usa la misma clave para un grupo de hostsen la sección
vars
de tu juego EDITAR : esta solución no funciona porque es demasiado tarde para definir la variable.- hosts: myHost remote_user: ubuntu vars_files: - vars.yml vars: ansible_ssh_private_key_file: "{{ key1 }}" tasks: - name: Echo a hello message command: echo hello
Ansible Playbook puede especificar la clave utilizada para la conexión ssh usando --key-file
en la línea de comandos.
ansible-playbook -i hosts playbook.yml --key-file "~/.ssh/mykey.pem"
¿Es posible especificar la ubicación de esta clave en el archivo de libro de jugadas en lugar de usar --key-file
en la línea de comandos?
Porque quiero escribir la ubicación de esta clave en un archivo var.yaml
, que será leído por un libro de vars_files:
ansible con vars_files:
Los siguientes son partes de mi configuración:
archivo vars.yml
key1: ~/.ssh/mykey1.pem
key2: ~/.ssh/mykey2.pem
archivo playbook.yml
---
- hosts: myHost
remote_user: ubuntu
key_file: {{ key1 }} # This is not a valid syntax in ansible. Does there exist this kind of directive which allows me to specify the ssh key used for this connection?
vars_files:
- vars.yml
tasks:
- name: Echo a hello message
command: echo hello
He intentado agregar ansible_ssh_private_key_file
debajo de vars
. Pero no funciona en mi máquina.
vars_files:
- vars.yml
vars:
ansible_ssh_private_key_file: "{{ key1 }}"
tasks:
- name: Echo a hello message
command: echo hello
Si ejecuto ansible-playbook
con el playbook.yml
arriba. Tuve el siguiente error:
TASK [Gathering Facts] ******************************************************************************************************************************
Using module file /usr/local/lib/python2.7/site-packages/ansible/modules/system/setup.py
<192.168.5.100> ESTABLISH SSH CONNECTION FOR USER: ubuntu
<192.168.5.100> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/Users/myName/.ansible/cp/2d18691789 192.168.5.100 ''/bin/sh -c ''"''"''echo ~ && sleep 0''"''"''''
<192.168.5.100> (255, '''', ''Permission denied (publickey)./r/n'')
fatal: [192.168.5.100]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey)./r/n",
"unreachable": true
}
to retry, use: --limit @/Users/myName/playbook.retry
No encuentro el nombre de mi archivo de clave en el comando ssh. Es extraño.
Puede usar el archivo ansible.cfg, debería verse así (hay otros parámetros que tal vez quiera incluir):
[defaults]
inventory: <YOUR INVENTORY>
remote_user = <YOUR USER>
private_key_file = <PATH TO KEY_FILE>
Espero que esto te ahorra algo de escritura
Si ejecuta su libro de jugadas con ansible-playbook -vvv
verá que se está ejecutando el comando real, de modo que puede verificar si la clave está siendo incluida realmente en el comando ssh (y puede descubrir que el problema fue el nombre de usuario incorrecto en lugar de la clave que falta).
Estoy de acuerdo con el comentario de Brian anterior (y con la edición de zigam) de que la sección vars es demasiado tarde. También probé incluyendo la clave en la definición sobre la marcha del host como este
# fails
- name: Add all instance public IPs to host group
add_host: hostname={{ item.public_ip }} groups=ec2hosts ansible_ssh_private_key_file=~/.aws/dev_staging.pem
loop: "{{ ec2.instances }}"
pero eso también falla.
Así que esto no es una respuesta. Sólo un poco de ayuda de depuración y cosas para no intentar.