2017-06-24 38 views
8

Skrytka odpowiedzi może określać klucz używany dla połączenia ssh za pomocą --key-file w wierszu poleceń.Określanie klucza ssh w pliku ansibli ansamere

ansible-playbook -i hosts playbook.yml --key-file "~/.ssh/mykey.pem" 

Czy to możliwe, aby określić położenie tego klucza w pliku PlayBook zamiast korzystania --key-file w wierszu polecenia?

Ponieważ chcę zapisać lokalizację tego klucza w pliku var.yaml, który zostanie odczytany za pomocą ansiblioteki z vars_files:.

Poniżej lista części mojej konfiguracji:

vars.yml plików

key1: ~/.ssh/mykey1.pem 
key2: ~/.ssh/mykey2.pem 

playbook.yml plik

--- 

- 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 

Próbowałem dodanie ansible_ssh_private_key_file pod vars. Ale to nie działa na moim komputerze.

vars_files: 
    - vars.yml 
vars: 
    ansible_ssh_private_key_file: "{{ key1 }}" 
tasks: 
    - name: Echo a hello message 
    command: echo hello 

Jeśli biegnę ansible-playbook z powyższym playbook.yml. Wystąpił następujący błąd:

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 

Nie znaleziono nazwy pliku klucza w poleceniu ssh. To dziwne.

Odpowiedz

13

Nazwa zmiennej, której szukasz, to ansible_ssh_private_key_file.

Należy ustawić ją na poziomie 'Vars':

  • w pliku zapasy:

    myHost ansible_ssh_private_key_file=~/.ssh/mykey1.pem 
    myOtherHost ansible_ssh_private_key_file=~/.ssh/mykey2.pem 
    
  • w 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 
    
  • w pliku group_vars jeśli używasz tego samego klucza dla grupy hostów

  • w sekcji vars gry EDIT: to rozwiązanie nie działa, ponieważ jest zbyt późno, aby zdefiniować zmienną.

    - 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 
    

Inventory documentation

+0

Pisanie 'ansible_ssh_private_key_file' pod' vars' nie działa na moim komputerze. To dziwne. – Brian

+0

Nie chcę określać klucza w ekwipunku. Ponieważ nie mogę załadować 'vars.yml' z pliku inwentarza. – Brian

+0

Dokładne: z 'vars' po prostu jest za późno. Powinieneś użyć plików 'host_vars' lub' group_vars', jeśli nie chcesz umieścić tego w swoim ekwipunku. – zigarn