Ansible - неверный пароль - даже если он должен быть правильным
Я использую ANSI модули / PlayBooks (например, ping) с этой командой пользователя, который имеет права sudo:
sudo ansible -m ping hosts
"hosts" - это группа из 2 хостов. Когда я запускаю это, меня спрашивают о локальном пароле sudo, что нормально. Затем меня просят sudo на удаленном хосте (потому что я настроил это в ansible.cfg), что тоже хорошо. Затем я должен ввести парольные фразы для обоих хостов, и вот где у меня проблема. Меня буквально спрашивают так в одной строке:
Enter passphrase for key '/home/myuser/.ssh/id_rsa':Enter passphrase for key '/home/myuser/.ssh/id_rsa':
так что я просто ввожу абсолютно правильную парольную фразу (в сочетании с сочетанием клавиш) и вхожу. И меня снова спрашивают о парольной фразе, теперь только один раз:
Enter passphrase for key '/home/myuser/.ssh/id_rsa':
Так что я ввожу его снова... и меня снова спрашивают и так далее, пока ssh не умрет и хосты не станут недоступны. Странно то, что иногда я могу заставить его работать, просто нажав "enter" с первой попытки, затем вставив фразу-пароль и неожиданно работающие вторые хосты. Когда я запускаю его еще раз, меня спрашивают о парольной фразе только один раз (для хоста, который не работал раньше), я ввожу парольную фразу, и теперь она работает.. Я как, черт возьми?
Это ошибка в Ansible или я что-то там не так делаю? Если я просто SSH к моим хозяевам, это работает абсолютно нормально. Пробовал запускать мои команды с множественным многословием, не нашел там ничего плохого. Есть идеи?
2 ответа
Во-первых, вам не нужен sudo локально для запуска этой команды. Так что сохраняйте себя sudo'ing локально без причины.
Далее вам не нужен пароль для пингования цели. Этого будет достаточно:
$ ansible all -i /tmp/hosts2ping -m ping
... где hosts2ping содержит ваш список хостов.
Если вы делаете что-то на удаленном компьютере, для которого вам необходимо войти в систему как не-root, вам нужно указать -k (или добавить 'ask_pass = True' в ~ / ansible.cfg):
$ ansible all -i /tmp/hosts2ping -a id -k
SSH password: <enter password>
10.1.2.3 | SUCCESS | rc=0 >> uid=nnnn<non-root-account>.....
... но должен запрашивать только один раз для всех хостов.
Если вам нужно выполнить корневую задачу, используйте -Kb тоже...
$ ansible all -i /tmp/hosts2ping -a id -k -Kb
SSH password: <enter password>
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=0(root).....
Если ваш ключ ssh развернут на цели, загрузите его в ssh-agent и вам не понадобится -k...
$ ssh-add
Enter passphrase for .ssh/id_rsa:
identity added: .ssh/id_rsa
$ ansible all -i /tmp/hosts2ping -a id # -k not needed
10.1.2.3 | SUCCESS | rc=0 >> uid=nnnn<non-root-account>.....
... ssh-agent выполняет всю работу.
Вам все равно понадобится ключ -Kb, если вы будете выполнять рутинные операции на удаленном компьютере, но вам не будет предложено ввести пароль без полномочий root (как это делает ssh-agent)...
$ ansible all -i /tmp/hosts2ping -a id -Kb # -k not needed
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=0(root).....
РЕДАКТИРОВАТЬ: Обычно sudo просто позволяет вашей учетной записи без полномочий root "установить пользователя" в качестве другого пользователя, обычно самого root. Итак, вы используете общую учетную запись для выполнения привилегированных действий? Это все еще должно работать. Просто измените параметры стать, чтобы указать общую учетную запись (вместо значения по умолчанию root), например:
$ ansible all -i /tmp/hosts2ping -a id -k -Kb --become-user=<shared-account>
SSH password: <enter password>
SUDO password[defaults to SSH password]: <RETURN>
10.1.2.3 | SUCCESS | rc=0 >> uid=43526(<shared-account>).....
Одним из вариантов будет добавить ваш ключ к ssh-agent
с помощью ssh-add
, Таким образом, вы больше этого не получите.
У меня возникла эта проблема, когда я пытался использовать Ansible через хост-бастион (jumpbox). Что исправлено:
ням обновление