Назад | Перейти на главную страницу

Ansible не поддерживает ssh-agent?

Кажется, у меня проблема, когда Ansible не использует мой кеш агента SSH. Я выполнил следующее:

eval `ssh-agent`
ssh-add /tmp/key

Затем я успешно вхожу в один из хостов из своего инвентаря, и это нормально:

ssh -i /tmp/key ec2-user@1.2.3.4

При использовании ansible на моем компьютере с Windows в WSL следующее заканчивается странным однострочным тройным запросом (по одному для каждого в моем инвентаре)

ansible --key-file /tmp/key -i ./hosts all -m ping

Вывод:

Enter passphrase for key '/tmp/key': Enter passphrase for key '/tmp/key': Enter passphrase for key '/tmp/key':
repo | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
    "unreachable": true
}


follower | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
    "unreachable": true
}


leader | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
    "unreachable": true
}

Я считаю, что Ansible должен использовать Paramiko для SSH, но предполагаю, что он все равно будет разговаривать с моим агентом SSH. Есть догадки, почему это не работает?

Это также работает на WSL в Windows 10, если это важно.

Вот результат с "-vvv":

ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/tmp/key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/mnt/c/Users/me/.ansible/cp/58691c2f88 1.2.3.4 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

Это время истекает при запуске из командной строки

Удаление парольной фразы полностью удаляет приглашение, но я продолжаю получать те же ошибки, поэтому может быть, что это видно каждый раз, когда Ansible не может аутентифицироваться на удаленных хостах?

Тьфу. PEBCAK. Проблема в том, что Ansible использует здесь неправильное имя пользователя.

Для других моим обходным решением было указать пользователя в инвентаре:

all:
  vars:
    ansible_user: "ec2-user"
  hosts:
    leader:
      ansible_host: 1.2.3.1
    follower:
      ansible_host: 1.2.3.2
    repo:
      ansible_host: 1.2.3.3                             

Не указывайте файл ключа, и Ansible просто запустит и использует агент, но, указав ключ, вы сообщаете Ansible этот ключ пользователю напрямую, а не агенту.