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

Невозможно подключиться к Ansible через SSH

Я создаю файл хоста со следующим содержимым

[web]
167.172.xxx.xxx

У меня есть пользователь root и dojo360 на веб-сервере, и открытый ключ также был добавлен в authorized_keys файл.

Когда я запускаю команду ansible web -m ping -i hosts Я получаю ошибку ниже

167.172.xxx.xxx | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 167.172.xxx.xxx port 22: Operation timed out",
    "unreachable": true
}

Я пробовал другие варианты файла hosts, ниже еще один, который я пробовал, также не работает

[web]
167.172.xxx.xxx ansible_connection=ssh ansible_user=user ansible_ssh_private_key_file=~/.ssh/id_rsa.pub

Однако я могу подключиться к серверу по ssh, используя ssh dojo360@167.172.xxx.xxx без проблем, я новичок в Ansible, но это не должно занять более 24 часов, пожалуйста, помогите, я застрял.

Бег с -vvv я получил

ansible 2.9.6
  config file = None
  configured module search path = ['/Users/g.james/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/g.james/Library/Python/3.7/lib/python/site-packages/ansible
  executable location = /Users/g.james/Library/Python/3.7/bin/ansible
  python version = 3.7.6 (default, Dec 30 2019, 19:38:26) [Clang 11.0.0 (clang-1100.0.33.16)]
No config file found; using defaults
setting up inventory plugins
host_list declined parsing /Users/g.james/dojo360/d3-scripts/server/hosts as it did not pass its verify_file() method
script declined parsing /Users/g.james/dojo360/d3-scripts/server/hosts as it did not pass its verify_file() method
auto declined parsing /Users/g.james/dojo360/d3-scripts/server/hosts as it did not pass its verify_file() method
Parsed /Users/g.james/dojo360/d3-scripts/server/hosts inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /Users/g.james/Library/Python/3.7/lib/python/site-packages/ansible/plugins/callback/minimal.py
META: ran handlers
<67.172.xxx.xxx> ESTABLISH SSH CONNECTION FOR USER: root
<67.172.xxx.xxx> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/Users/g.james/.ssh/id_rsa.pub"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o ControlPath=/Users/g.james/.ansible/cp/5d3d6b8351 67.172.xxx.xxx '/bin/sh -c '"'"'echo ~root && sleep 0'"'"''
<67.172.xxx.xxx> (255, b'', b'OpenSSH_7.9p1, LibreSSL 2.7.3\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug2: resolve_canonicalize: hostname 67.172.xxx.xxx is address\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: Control socket "/Users/g.james/.ansible/cp/5d3d6b8351" does not exist\r\ndebug2: ssh_connect_direct\r\ndebug1: Connecting to 67.172.xxx.xxx [67.172.xxx.xxx] port 22.\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug1: connect to address 67.172.xxx.xxx port 22: Operation timed out\r\nssh: connect to host 67.172.xxx.xxx port 22: Operation timed out\r\n')
67.172.xxx.xxx | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: OpenSSH_7.9p1, LibreSSL 2.7.3\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug2: resolve_canonicalize: hostname 67.172.xxx.xxx is address\r\ndebug1: auto-mux: Trying existing master\r\ndebug1: Control socket \"/Users/g.james/.ansible/cp/5d3d6b8351\" does not exist\r\ndebug2: ssh_connect_direct\r\ndebug1: Connecting to 67.172.xxx.xxx [67.172.xxx.xxx] port 22.\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug1: connect to address 67.172.xxx.xxx port 22: Operation timed out\r\nssh: connect to host 67.172.xxx.xxx port 22: Operation timed out",
    "unreachable": true
}

Попробуйте подключиться, используя ту же команду, что и ansible:

ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60s -o 'IdentityFile = "/ Users / g.james / .ssh / id_rsa.pub"' -o KbdInteractiveAuthentication = no -o PreferredAuthentication = gssapi-with-mic , gssapi-keyex, hostbased, publickey -o PasswordAuthentication = no -o 'User = "root"' -o ConnectTimeout = 10 -o ControlPath = / Users / g.james / .ansible / cp / 5d3d6b8351 67.172.xxx.xxx

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

В общем, мы должны использовать учетные данные домена, а не аутентификацию на основе ключа, для запуска playbook с узла управления на любой из ваших удаленных серверов.

Но в вашем случае вы пытаетесь аутентифицироваться, используя пользователя root и ключ. Итак, выполните следующие шаги:

  1. Создайте пользователя с именем ansible и создайте ключ на узле управления (главный сервер ansible) для пользователя ansible.
  2. Если вы создали ключи для этого пользователя, вы получите два файла: закрытый ключ и открытый ключ.
  3. Скопируйте содержимое открытого ключа на удаленные серверы «/home/ansible/.ssh/authorized_keys», которыми вы хотите управлять через узел управления ansible.

  4. Теперь проверьте SSH, используя команду ниже ssh -i /path/to/private-key ansible@<remoteserverip>

    Надеюсь это поможет.