Не удалось установить соединение при подготовке через сервер ansible-playbook.yml


Я использую рабочий процесс Root.io Trellis.

Я столкнулся с ошибкой, из-за которой я не смог установить соединение через ansible-playbook.

  1. Когда я запускаю 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.

  2. Поэтому я использовал другой подход. на этот раз указан ключ в командной строке

    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
    
  3. Итак, я наконец вошел в систему, используя команду ниже:

    ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa --ask-become-pass
    

    После запроса у меня пароля он работает и без проблем обеспечивает мой сервер.

Может ли кто-нибудь пролить свет на это? Я что-то упускаю? Дайте мне знать, если вам понадобится более подробная информация.

Author: kaiser, 2016-04-21

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 корневого пользователя

 2
Author: JohnnyQ, 2016-04-22 02:40:31

Вероятно, вы не добавили свой открытый ключ в authorized_keys файл внутри машины. Вы также можете добавить свой закрытый ключ к локальному агенту SSH.

  1. Поместите свой открытый ключ внутри сервера. Пример ключа, который уже находится на сервере:

    # 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"
    
  2. Вам необходимо добавить закрытый ключ к вашему агенту

    # Start agent
    eval "$(ssh-agent -s)"
    # Add private key
    ssh-add ~/.ssh/your_private_key
    
 1
Author: kaiser, 2016-04-21 14:49:02