2016-08-29 2 views
0

быстрого вопросанзибль: «Суд: требуется пароль г п»

У меня есть установка сервер Ubuntu с помощью теста на имя пользователя. Я копирую в него файлы authorized_keys, я не могу скомпрометировать ssh. Если я $ анзибль -m пинг ubu1, никаких проблем я получаю в ответ

<i><p>ubu1 | SUCCESS => { 
     <br>"changed": false, 
     <br>"ping": "pong" 
    <br>}</i> 

То, что я не получаю это, если я

$ анзибль-сборник пьес -vvvv Playbooks/htopInstall .yml

fatal: [ubu1]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "setup"}, "module_stderr": "OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g-fips 1 Mar 2016\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 19: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 6109\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\nShared connection to 192.168.1.112 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "parsed": false} 

Если я $ анзибль-PlayBook --ask-Судо-пасс Playbooks/htopInstall.yml, то задать пароль пользователя и игры это успех.

Если я переименую authorized_keys, он сообщает мне: «Не удалось подключиться к хосту через ssh». это нормально. Что я не понимаю, почему он просит пароль sudo. Я определенно пропустил что-то по пути.

мой ansible.cfg файл выглядит следующим образом

[defaults] 
nocows = 1 
inventory = ./Playbooks/hosts 
remote_user = test 
private_key_file = /home/test/.ssh/id_ubu 
host_key_checking = false 

мой хост файл выглядит следующим образом

[servers] 
ubu1 ansible_ssh_host=192.168.1.112 ansible_ssh_user=test 
+1

Вы не указали главный файл 'Playbooks/htopInstall.yml'. И, пожалуйста, потратьте несколько минут на изучение того, как форматирование работает на SO и какое форматирование обычно используется для разных элементов. – techraf

+1

У вас есть пароль для sudo с поддержкой пароля на целевом хосте для пользователя 'test'? –

ответ

6

То, что я не понимаю, это почему он спрашивает пароль SUDO.

Мы не можем с уверенностью сказать, не видя пьесы, но это почти наверняка потому, что а) ваш сборник пьесы просит анзибль запустить определенную команду с sudo (через директиву sudo или become) и б) test пользователя не имеет пароля sudo.

Звучит так, как будто вы знаете (а), но смущены (б); в частности, то, что я собираю, заключается в том, что вы не понимаете разницы между ssh аутентификацией и аутентификация sudo. Опять же, без дополнительной информации я не могу подтвердить, так ли это, но я возьму удар, объяснив это, если я правильно догадался.

При подключении к машине через ssh существует два основных способа, с помощью которых sshd аутентифицирует вас и позволяет вам войти в систему как конкретный пользователь. Первый заключается в том, чтобы запросить пароль учетной записи, который находится в системе, и позволяет войти в систему, если это было правильно. Второе - через public-key cryptography, в котором вы подтверждаете, что у вас есть доступ к закрытому ключу, который соответствует отпечатку открытого ключа в ~/.ssh/authorized_keys. Передача проверок проверки подлинности sshd дает вам оболочку на машине.

Когда вы вызываете команду с sudo, вы запрашиваете sudo, чтобы повысить свои привилегии выше того, что обычно получает учетная запись. Это совершенно другая система, с правилами, определенными в /etc/sudoers (которые вы должны редактировать с помощью sudo visudo), которые контролируют, каким пользователям разрешено использовать sudo, какие команды они должны выполнять, нужно ли им повторно вводить свой пароль или нет при использовании команды и множестве других параметров конфигурации.

При запуске playbook обычно Ansible представлен приглашением sudo и не знает, как продолжить - он не знает пароль учетной записи. Вот почему существует --ask-sudo-pass: вы передаете пароль Ansible, чтобы он мог передать его sudo при появлении запроса. Если вы не хотите вводить это каждый раз, и вы решили, что в ваших параметрах безопасности разрешено регистрировать пользователя в качестве пользователя test для выполнения каких-либо действий с правами администратора, то вы можете обратиться к man sudoers о том, как установить пароль sudo для этой учетной записи.

0

Я решил эту точную ошибку sudo: a password is required\n, которую я получил, когда работаю мой сборник пьес с become: true, но где-то в задаче делегирования на локальном, что-то вроде этого:

uri: 
    url: "{{ some_url }}" 
    return_content: yes 
    status_code: 200 
delegate_to: 127.0.0.1 

Если я правильно понял, become: true вызывает анзибль войти на удаленный хост в качестве моего пользователя, а затем используйте sudo, чтобы выполнить все команды на удаленном хосте, как root. Теперь, когда делегирование 127.0.0.1, sudo также выполняется, и, как это бывает, на моем локальном хосте ожидается пароль при использовании sudo.

Для меня решение было просто удалить delegate_to, который на самом деле не нужен в этом конкретном случае использования.

Смежные вопросы