Как игнорировать проверку подлинности Ansible 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)?

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

3 99

3 ответа:

два варианта-первый, как вы сказали в своем ответе, устанавливает переменную окружения ANSIBLE_HOST_KEY_CHECKING значение false.

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

чтобы сделать это, сделайте в одном из этих мест, и включают в себя это:

[defaults]
host_key_checking = False

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


Edit: примечание по безопасности.

проверка ключа хоста 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)
  • отключить проверку ключа хоста в рабочем каталоге для playbooks вы запускаете против эфемерных экземпляров (./ansible.cfg наряду с playbook для модульных тестов против бродячих виртуальных машин, автоматизация для кратковременных экземпляров ec2)

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

ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...

вперед nikobelia

для тех, кто использует jenkins для запуска книги воспроизведения, я просто добавил в свою работу jenkins перед запуском ansible-playbook переменную среды he ANSIBLE_HOST_KEY_CHECKING = False Например это:

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