Я запускаю доступные модули / плейбуки (например, 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':
поэтому я просто ввожу свою кодовую фразу абсолютно правильно (скопировано из keypass) и вхожу. И меня снова спрашивают кодовую фразу, теперь только один раз:
Enter passphrase for key '/home/myuser/.ssh/id_rsa':
Итак, я ввожу его снова ... и меня снова спрашивают, и так далее, пока ssh не умрет и хосты не станут недоступны. Странно то, что иногда я могу заставить его работать, просто нажав "Enter" при первой попытке, затем вставив кодовую фразу, и вторые хосты внезапно заработают. Когда я запускаю его еще раз, меня спрашивают парольную фразу только один раз (для хоста, который раньше не работал), я ввожу парольную фразу, и теперь она работает.
Это ошибка в Ansible или я что-то там не так делаю? Если я просто использую ssh для своих хостов, он работает нормально. Пытался выполнить мои доступные команды с множественной подробностью, но не нашел там ничего плохого. Любые идеи?
Во-первых, вам не нужно использовать sudo локально для запуска этой команды. Так что спасайте себя от sudo'ing локально без причины.
Далее, вам не нужен пароль для ping target. Этого будет достаточно:
$ 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>.....
... но должен запрашивать только один раз для всех хостов.
Если вам нужно выполнить задачу root, также используйте -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>).....
У меня возникла эта проблема, когда я пытался использовать Ansible через хост-бастион (jumpbox). Что исправлено:
ням обновление
Один из вариантов - добавить свой ключ в ssh-agent
с помощью ssh-add
. Таким образом, вы этого больше не получите.