Не удалось установить соединение при подготовке через сервер ansible-playbook.yml
Я использую рабочий процесс Root.io
Trellis
.
Я столкнулся с ошибкой, из-за которой я не смог установить соединение через ansible-playbook
.
-
Когда я запускаю
ansible-playbook server.yml -e env=staging
, он выдает мне сообщение об ошибке, что соединение ssh не может быть установлено, поэтому я проверил свой файлusers.yml
и увидел проблему в разделеkeys
:- name: "{{ admin_user }}" groups: - sudo keys: - "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" - https://github.com/dummyuser.keys
Я понял, что у меня есть существующий ключ
id_rsa.pub
, но он не был авторизован на моем сервере, вместо этого я использовалhttps://github.com/dummyuser.keys
. Поэтому я удалил эта строка- "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
Однако проблема все еще сохраняется. Ответ был таким:
fatal: [10.10.2.5]: UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }
Также, почему конфигурация указывает на
public key
, когда нам нужноprivate key
для входа через ssh. Я обычно делаюssh -i ~/.ssh/private_key [email protected]
Всякий раз, когда я захожу на сервер по ssh.
-
Поэтому я использовал другой подход. на этот раз указан ключ в командной строке
ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa
И в результате я смог установить соединение:
<10.10.2.5> ESTABLISH SSH CONNECTION FOR USER: dummy_admin
Но была еще одна ошибка: в нем говорится
a password is required
вот полное сообщение:fatal: [10.10.2.5]: FAILED! => { "changed": false, "failed": true, "invocation": {"module_name": "setup"}, "module_stderr": "OpenSSH_6.9p1, LibreSSL 2.1.8\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 21: 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 = 85702\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 10.10.2.5 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "parsed": false }
Я не уверен, почему он запрашивает пароль, я уже установил его в своем
group_vars/staging/vault.yml
вот содержание этого:vault_mysql_root_password: stagingpw vault_sudoer_passwords: dummy_admin: $6$rounds=656000$8DWzDN3KQkM9SjlF$DhxLkYaayplFmtj9q.EqzMDWmvlLNKsLU0GPL9E0P2EvkFQBsbjcMCXgWkug4a5E66PfwL4eZQXzMLkhXcPBk0
-
Итак, я наконец вошел в систему, используя команду ниже:
ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa --ask-become-pass
После запроса у меня пароля он работает и без проблем обеспечивает мой сервер.
Может ли кто-нибудь пролить свет на это? Я что-то упускаю? Дайте мне знать, если вам понадобится более подробная информация.
2 answers
Я также опубликовал этот вопрос в дискурсе и @fullyint подробно ответил на него. Поэтому я просто публикую ссылку для ответа и некоторую выдержку
Помощь Ansible и ssh в поиске необходимого закрытого ключа
Это означает, что вы вручную указываете закрытый ключ с каждой командой ssh, и да, следствием ручного указания закрытого ключа с каждой командой ansible-playbook является добавление опции --private-key= или key-file=. Однако вы могли бы избавить себя от некоторых хлопот, включив команды ssh и ansible-playbook для автоматического поиска и использования нужного файла закрытого ключа. Одним из подходов было бы добавить запись в ваш конфигурационный файл ssh, указав идентификационный файл, который будет использоваться с хостом 10.10.2.5. Я бы рекомендовал альтернативу загрузки ~/.ssh/dummy_rsa в ваш ssh-агент, который может обрабатывать ключи для вас, пробуя несколько закрытых ключей при попытке подключения.
Убедитесь, что ваш ssh-агент запущен: ssh-агент bash Добавьте свой ключ: ssh-добавьте ~/.ssh/dummy_rsa Если вы работаете на mac, добавьте ключ в свою связку ключей: ssh-add-K ~/.ssh/dummy_rsa Теперь вы должны иметь возможность запускать команды ssh без опции-i и команды ansible-playbook без опции --key-file=, потому что ваш ssh-агент сообщит этим командам различные доступные закрытые ключи, чтобы попытаться установить ssh-соединения.Причины ошибки "sudo: требуется пароль"
Из задач, которые выполняет Решетка через плейбук server.yml для некоторых требуется sudo. Это не проблема, когда playbook подключается как root, но иногда playbook не подключается как root. Если эта начальная попытка подключения от имени root завершится неудачей, он вернется к подключению от имени пользователя admin_user. Этот пользователь должен указать свой пароль sudo с помощью опции --ask-become-pass, как вы обнаружили.
Возможно, вы уже знаете, почему ваше подключение как root не удалось, но вот некоторые возможности:
Возможно, ваш пульт дистанционного управления находится на AWS, где root по умолчанию отключен, и ваш пользователь admin_user: ubuntu.
Возможно, вы уже успешно запустили server.yml с sshd_permit_root_login: false в group_vars/all/security.yml, поэтому root больше не разрешается входить через ssh (хорошая безопасность). Возможно, закрытый ключ, который вы пытаетесь использовать, не загружен на пульт дистанционного управления в authorized_keys корневого пользователя
Вероятно, вы не добавили свой открытый ключ в authorized_keys
файл внутри машины. Вы также можете добавить свой закрытый ключ к локальному агенту SSH.
-
Поместите свой открытый ключ внутри сервера. Пример ключа, который уже находится на сервере:
# Add key directly on the box: echo "$(cat your_public_key)" >> ~/.ssh/authorized_keys # Add key from local to remote: ssh user@server "echo \"$(cat your_public_key)\" >> ~/.ssh/authorized_keys"
-
Вам необходимо добавить закрытый ключ к вашему агенту
# Start agent eval "$(ssh-agent -s)" # Add private key ssh-add ~/.ssh/your_private_key