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