Два варианта - первый, как вы сказали в своем ответе, это установка переменной среды ANSIBLE_HOST_KEY_CHECKING
в False.
Второй способ установить его - поместить его в файл ansible.cfg, и это действительно полезный параметр, поскольку вы можете установить его глобально (на уровне системы или пользователя, в /etc/ansible/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
наряду с книгой воспроизведения для модульных тестов против бродячих виртуальных машин, автоматизации для кратковременных экземпляров ec2)
known_hosts
файлах, чтобы SSH и Ansible могли распознать компьютер. Невыполнение этого требования, особенно путем отключения проверки ключа хоста, снижает безопасность SSH практически до нуля и допускает атаки MITM. Многие машины, которые считаются находящимися во «внутренней сети», фактически подключены к Интернету, где один более быстрый ответ DNS позволяет вам общаться с злоумышленником, а не с вашей целью.ssh-keyscan <ip list>
на доверенной машине (для меня это хост бастиона / прыжка) внутри одной сети и поместил результаты в разделе «known_hosts
Для настройки этого доверенного хоста AWS предоставляет ключ хоста в журналах запуска экземпляра, поэтому поиск этого ключа был одним ручным шагом, который я никогда не вырезал, если выполнял полное воссоздание своей среды. Но этот хост обычно не нужно удалять. Это может помочь.Я нашел ответ, вам нужно установить переменную окружения
ANSIBLE_HOST_KEY_CHECKING
вFalse
. Например:источник
вперед к никобелия
Для тех, кто использует jenkins для запуска игровой книги, я просто добавил в свою работу jenkins перед запуском ansible-playbook переменную среды he ANSIBLE_HOST_KEY_CHECKING = False Например, это:
источник
Изменение
host_key_checking
наfalse
для всех хостов это очень плохая идея.Единственный раз, когда вы хотите игнорировать это, это «первый контакт», который будут выполнены этими двумя задачами:
Поэтому мы отключаем проверку ключа хоста только в том случае, если в нашем
known_hosts
файле нет ключа хоста .источник
Вы можете передать его в качестве аргумента командной строки при запуске playbook:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
источник
Если вы не хотите изменять
ansible.cfg
илиplaybook.yml
тогда, вы можете просто установить переменную окружения:источник
Игнорирование проверки - плохая идея, так как она делает вас уязвимыми к атакам «Человек посередине».
Я воспользовался возможностью улучшить ответ nikobelia, просто добавив ключ каждой машины один раз и фактически установив статус ok / измененный в Ansible:
Однако Ansible начинает собирать факты до запуска сценария, который требует SSH-соединения, поэтому нам нужно либо отключить эту задачу, либо вручную перенести ее на более позднюю версию:
Один излом, который я не смог понять, это то, что он помечает все как измененные, даже если он добавляет только один ключ. Если бы кто-нибудь мог внести исправление, это было бы здорово!
источник
Используйте параметр с именем validate_certs, чтобы игнорировать проверку ssh
Делая это, он игнорирует процесс проверки SSH
источник
validate_certs
Параметр просто говорит бото не подтверждать AWS API HTTPS серт. Это не влияет на проверку ключа SSH.Я знаю, что на вопрос был дан ответ, и он тоже правильный, но я просто хотел связать отчетный документ, где четко объясняется, когда и почему должна быть добавлена соответствующая проверка: проверка ключа узла
источник
Большинство проблем возникает, когда вы хотите добавить новый хост в динамический инвентарь (через модуль add_host) в playbook. Я не хочу постоянно отключать проверку хоста по отпечаткам пальцев, поэтому такие решения, как отключение его в глобальном конфигурационном файле, мне не подходят. Экспорт var как
ANSIBLE_HOST_KEY_CHECKING
перед запуском playbook - это еще одна вещь, которую нужно сделать перед запуском, которую нужно запомнить.Лучше добавить локальный конфигурационный файл в тот же каталог, где находится playbook. Создать файл с именем
ansible.cfg
и вставьте следующий текст:Не нужно помнить, чтобы добавить что-то в env vars или добавить в
ansible-playbook
опции. Этот файл легко поместить в ANSI GIT РЕПО.источник