Как игнорировать аутентичную проверку подлинности SSH?

Есть ли способ игнорировать проверку подлинности SSH, выполненную Ansible? Например, когда я только что настроил новый сервер, я должен ответить "да" на этот вопрос:

GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?

Я знаю, что это, как правило, плохая идея, но я включаю это в script, который сначала создает новый виртуальный сервер у моего облачного провайдера, а затем автоматически вызывает мою загружаемую книгу для ее настройки. Я хочу избежать вмешательства человека в середине выполнения script.

Ответ 1

Два варианта - первый, как вы сказали в своем собственном ответе, - установка переменной среды ANSIBLE_HOST_KEY_CHECKING в значение False.

Второй способ установить его - поместить его в файл ansible.cfg, и это действительно полезный параметр, поскольку вы можете установить его глобально (на уровне системы или пользователя, в /etc/ansible/ansible.cfg или ~/.ansible.cfg), или в файле конфигурации в том же каталоге, в котором вы работаете.

Для этого ansible.cfg файл ansible.cfg в одном из этих мест и ansible.cfg его:

[defaults]
host_key_checking = False

Вы также можете установить множество других удобных настроек по умолчанию, например, собирать факты в начале игры, объединять ли хеши, объявленные в нескольких местах, или заменять друг друга, и так далее. Там целый большой список вариантов здесь в анзибле документы.


Редактировать: заметка о безопасности.

Проверка ключа хоста SSH является значимым уровнем безопасности для постоянных хостов - если вы подключаетесь к одному и тому же компьютеру много раз, полезно принять ключ хоста локально.

Для более долгоживущих экземпляров EC2 имеет смысл принять ключ хоста с задачей, которая запускается только один раз при первоначальном создании экземпляра:

  - name: Write the new ec2 instance host key to known hosts
    connection: local
    shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

Не существует значения безопасности для проверки ключей хоста в тех случаях, когда вы динамически встаете и удаляете сразу после выполнения playbook, но есть значение безопасности при проверке ключей хоста для постоянных компьютеров. Таким образом, вы должны управлять проверкой ключей хоста по-разному для каждой логической среды.

  • Оставьте проверку включенной по умолчанию (в ~/.ansible.cfg)
  • Отключите проверку ключа хоста в рабочем каталоге для книг воспроизведения, которые вы запускаете для эфемерных экземпляров (./ansible.cfg вместе с ./ansible.cfg для модульных тестов против бродячих виртуальных машин, автоматизация для кратковременных экземпляров ec2)

Ответ 2

Я нашел ответ, вам нужно установить переменную среды ANSIBLE_HOST_KEY_CHECKING на False. Например:

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...

Ответ 3

перейдите к nikobelia

Для тех, кто использует jenkins для запуска игровой книги, я просто добавил к своей работе jenkins, прежде чем запускать загрузочную книгу, переменную окружения ANSIBLE_HOST_KEY_CHECKING = False Например, это:

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv

Ответ 4

Вы можете передать его в качестве аргумента командной строки при запуске playbook:

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'

Ответ 5

Изменение host_key_checking на false для всех хостов - очень плохая идея.

Единственный раз, когда вы хотите игнорировать это, это "первый контакт", который будут выполнены этими двумя задачами:

- name: Check known_hosts for {{ inventory_hostname }}
  local_action: shell ssh-keygen -F {{ inventory_hostname }}
  register: has_entry_in_known_hosts_file
  changed_when: false
  ignore_errors: yes
- name: Ignore host key on first run
  when: has_entry_in_known_hosts_file == 1
  set_fact:
    ansible_ssh_common_args: '-o StrictHostKeyChecking=no'

Поэтому мы отключаем проверку ключа хоста только в том случае, если у нас нет ключа хоста в нашем файле known_hosts.

Ответ 6

Используйте параметр с именем validate_certs, чтобы игнорировать проверку ssh

- ec2_ami:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

Делая это, он игнорирует процесс проверки SSH

Ответ 7

Я знаю, что на вопрос был дан ответ, и он тоже правильный, но я просто хотел связать ответный документ, где он четко объяснил, когда и почему должна быть добавлена соответствующая проверка: проверка ключа узла

Ответ 8

Если вы не хотите изменять ansible.cfg или playbook.yml, вы можете просто установить переменную окружения:

export ANSIBLE_HOST_KEY_CHECKING=False

Ответ 9

Большинство проблем возникает, когда вы хотите добавить новый хост в динамический инвентарь (через модуль add_host) в playbook. Я не хочу постоянно отключать проверку хоста по отпечаткам пальцев, поэтому такие решения, как отключение его в глобальном конфигурационном файле, мне не подходят. Экспорт var, например, ANSIBLE_HOST_KEY_CHECKING перед запуском playbook, - это еще одна вещь, которую нужно сделать перед запуском, которую необходимо запомнить.

Лучше добавить локальный конфигурационный файл в тот же каталог, где находится playbook. Создайте файл с именем ansible.cfg и вставьте следующий текст:

[defaults]
host_key_checking = False

Не нужно забывать добавлять что-либо в env vars или добавлять в опции ansible-playbook. Легко поместить этот файл в gible repo.