Я пытаюсь заново сгенерировать ключи хоста ssh на нескольких удаленных серверах через ansible (и ssh-keygen
), но файлы, похоже, не отображаются. Playbook работает нормально, но файлы на пульте не изменяются.
Мне нужно прибегнуть к echo -e
взлому, так как эти пульты работают под управлением Ubuntu 14.04 и не имеют правильной python-pexpect
доступной версии (согласно ansible).
Что мне не хватает? Мой playbook и вывод ниже:
сборник пьес
---
- hosts: all
become: true
gather_facts: false
tasks:
- name: Generate /etc/ssh/ RSA host key
command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ DSA host key
command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ ECDSA host key
command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
вывод
$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com,
SUDO password:
PLAY [all] **********************************************************************************************
TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C -N "
]
}
PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6 changed=3 unreachable=0 failed=0
file: state:absent ...
подход к пайпингу в ssh-keygen. Хотя, вероятно, нет особой разницы.absent
пару дней назад. Фактически это удалит файл до повторной генерации ключа. Это гораздо более четкий подход. Спасибо.Анзибль
command
модуль не передавать команды через оболочку . Это означает, что вы не можете использовать операторы оболочки, такие как канал, и поэтому вы видите символ канала в выходных данных. Что касается ansible, он выполнил командуecho
со всей остальной частью строки в качестве аргументовecho
.Если вам нужна командная строка, обработанная оболочкой, используйте
shell
вместоcommand
.И должен быть лучший способ регенерировать ключи хоста ssh, но я не могу найти один прямо сейчас ...
источник
echo ...
немного не сделали работу после второго запуска (я тестировал в/tmp/
которой ключи не были в первый раз). Как вы упомянули, я прибегнул к удалению ключей хоста и генерации новых. Что касается автоматического восстановления ключей, это зависит от вашего распространения, правильно? Не все дистрибутивы Linux используют systemd.Используйте специальный модуль для этой задачи:
источник
извините, но я не мог использовать «создает» в задаче. я получил следующую ошибку:
следовательно, я использую следующие задачи:
источник
@Zoredache имеет правильный ответ, но он терпит неудачу (замечено @MaxiReglisse) для последних версий Ansible. Вместо этого используйте следующий код:
источник
Другой вариант - использовать пользовательский модуль. Положительной стороной этого является то, что вы получите идемпотентную задачу. Вот пример того, как генерировать ключи SSH на локальном хосте:
источник
Используйте модули openssh_keypair и authorized_key для одновременного создания и развертывания ключей, не сохраняя их на своем хосте.
источник