2016-08-19 4 views
3

Я использую ansible для создания нескольких экземпляров ec2, копирования файлов на вновь созданные серверы и запуска команд на этих серверах. Вопрос заключается в том, что после создания сервера я все еще должен войти да в следующей строке SSH:Ansible - Как ssh в экземпляр без подсказки «подлинность хоста»?

TASK [Adding /etc/rc.local2 to consul servers] ********************************* 
changed: [localhost -> 172.31.52.147] => (item={u'ip': u'172.31.52.147', u'number': 0}) 
The authenticity of host '172.31.57.20 (172.31.57.20)' can't be established. 
ECDSA key fingerprint is 5e:c3:2e:52:10:29:1c:44:6f:d3:ac:10:78:10:01:89. 
Are you sure you want to continue connecting (yes/no)? yes 
changed: [localhost -> 172.31.57.20] => (item={u'ip': u'172.31.57.20', u'number': 1}) 
The authenticity of host '172.31.57.19 (172.31.57.19)' can't be established. 
ECDSA key fingerprint is 4e:71:15:fe:c9:ec:3f:54:65:e8:a1:66:74:92:f4:ff. 
Are you sure you want to continue connecting (yes/no)? yes 

Как я анзибль игнорировать эту строку и просто ответить да автоматически? Для справки вот мой сборник пьес:

--- 
- hosts: localhost 
    connection: local 
    gather_facts: false 
    sudo: yes 

    vars_files: 
    - ami-keys.yml 
    - ami-image.yml  

    tasks: 

    - name: create 3 consul servers 
     ec2: 
     aws_access_key: '{{ aws_access_key }}' 
     aws_secret_key: '{{ aws_secret_key }}' 
     key_name: terra 
     group: default 
     instance_type: t2.micro 
     image: '{{ ami }}' 
     region: '{{ region }}' 
     wait: true 
     exact_count: 3 
     count_tag: 
      Name: consul-server 
     instance_tags: 
      Name: consul-server 
     register: ec2 


    - name: Wait for SSH to come up 
     wait_for: host={{ item }} port=22 delay=1 timeout=480 state=started 
     with_items: 
     - "{{ ec2['tagged_instances'][0]['private_ip'] }}" 
     - "{{ ec2['tagged_instances'][1]['private_ip'] }}" 
     - "{{ ec2['tagged_instances'][2]['private_ip'] }}" 

    # shows the json data for the instances created 
    - name: consul server ec2 instance json data 
     debug: 
     msg: "{{ ec2['tagged_instances'] }}" 

    # bootstrapping 
    - name: Adding /etc/rc.local2 to consul servers 
     template: 
     src: template/{{ item.number }}.sh 
     dest: /etc/rc.local2 
     delegate_to: "{{ item.ip }}" 
     with_items: 
     - ip: "{{ ec2['tagged_instances'][0]['private_ip'] }}" 
      number: 0 
     - ip: "{{ ec2['tagged_instances'][1]['private_ip'] }}" 
      number: 1 
     - ip: "{{ ec2['tagged_instances'][2]['private_ip'] }}" 
      number: 2 
     ignore_errors: true 

    - name: give /etc/rc.local2 permissions to run and starting swarm 
     shell: "{{ item[1] }}" 
     delegate_to: "{{ item[0] }}" 
     with_nested: 
     - [ "{{ ec2['tagged_instances'][0]['private_ip'] }}", 
      "{{ ec2['tagged_instances'][1]['private_ip'] }}", 
      "{{ ec2['tagged_instances'][2]['private_ip'] }}" ] 
     - [ "sudo chmod +x /etc/rc.local2", 
      "sleep 10", 
      "consul reload", 
      "docker run --name swarm-manager -d -p 4000:4000 --restart=unless-stopped \ 
      swarm manage -H :4000 \ 
      --replication --advertise \ 
      $(hostname -i):4000 \ 
      consul://$(hostname -i):8500" ] 
     ignore_errors: true 

Примечание: Я уже пробовал работает:

ansible-playbook -e 'host_key_checking=False' consul-server.yml 

и не удаляет строку.

Идет в /etc/ansible/ansible.cfg и раскомментирует строку host_key_checking=False действительно удаляет подсказку, однако я хочу, чтобы этого не делалось, и либо введите что-то в свою книгу или в командную строку, когда я запустил свою игру.

+0

Там есть комментарий по этому вопросу page: http://stackoverflow.com/questions/23074412/how-to-set-host-key-checking-false-in-ansible-inventory-file, в котором говорится, что метод -e "host_key_checking = False" не работает и он получил 9 голосов, поэтому кажется, что несколько человек столкнулись с этой проблемой. Можете ли вы просто установить его как ansible.cfg? –

+0

Редактирование файла '/ etc/ansible/ansible.cfg' и раскомментирование строки' host_key_checking = False' позволило моей playbook работать без подсказки. Однако я стараюсь избегать этого шага и просто отключить проверку ключа внутри моей пьесы или когда я запускаю playbook в командной строке. Есть простой способ сделать это? –

ответ

5

Общая рекомендация - установить host_key_checking=False в конфигурации Ansible. Это плохая идея, потому что предполагается, что ваше сетевое соединение никогда не будет скомпрометировано.

Намного лучшая идея, что только предполагает, что сеть не MitMed при первом создании серверов, чтобы использовать ssh-keyscan добавить отпечатки пальцев к серверам на известных хосты файл:

- name: accept new ssh fingerprints           
    shell: ssh-keyscan -H {{ item.public_ip }} >> ~/.ssh/known_hosts   
    with_items: '{{ ec2.instances }}' 
+1

Я попытался добавить эту задачу в свою плейбук перед моим именем '': добавление /etc/rc.local2 для выполнения задач consul servers', и оно завершается успешно, но оно не удаляет приглашение. Я также попытался заменить '{{item.public_ip}}' на '{{item.private_ip}}', так как я использую внутренние IP-адреса. Я сделаю немного больше отладки, чтобы увидеть, могу ли я заставить его работать. –

+0

Я получил его, мне просто пришлось сменить '~/.ssh/known_hosts' на'/home/ubuntu/.ssh/known_hosts', и он работает. –

+0

Интересно, работаете ли вы как другой пользователь, чем вы вошли в систему или что-то в этом роде? Знаете ли вы, к какому файлу он присоединился? –