Настройка SSH-команды для Ansible — не удаётся подключиться

Настройка SSH-команды для Ansible — не удаётся подключиться

Я пытаюсь использовать Ansible для развертывания на хосте AWS, у которого нет публичного IP-адреса. Я могу вручную подключиться к хосту по ssh на jump box, а на этом box по ssh на частную машину, напримерmy machine-->bastion-->private server

Я не думаю, что смогу использовать собственную поддержку Ansible, потому что этот плейбук использует роли, которые являются общими с другими плейбуками. Эти роли зависят от определенных групп инвентаря. Если я настрою, group_varsто это сломает плейбуки для развертывания этого в инфраструктуре, отличной от AWS.

Мой файл конфигурации ssh выглядит так:

# Servers in availability zone A
    Host 10.0.0.*
      ProxyCommand ssh -W %h:%p bastion.example.com
      IdentityFile ~/.ssh/key.pem

# Servers in availability zone B
Host 10.0.1.*
  ProxyCommand ssh -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# The bastion host itself
Host bastion.example.com
  User ubuntu
  IdentityFile ~/.ssh/key.pem
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

Обратите внимание, что ключ одинаков для бастионного и частного серверов.

При попытке ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvvя получаю следующий вывод:

    (venv) andrew@dell:~/projects/ansible-playbooks$ ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /tmp/aws_bastion_ssh_config
debug1: /tmp/aws_bastion_ssh_config line 6: Applying options for 10.0.0.*
debug1: Executing proxy command: exec ssh -W 10.0.0.175:22 bastion.example.com
debug1: permanently_drop_suid: 1000
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
Permission denied (publickey).
ssh_exchange_identification: Connection closed by remote host

Как мне это сделать?

Нужно ли, чтобы ключ был на прикуривателе? Как это настроить?

Редактировать: Дополнительная информация:- Чтобы прояснить, что я могу подключиться к частной машине с jump box, когда я ssh bastion.example.com -F /tmp/aws_bastion_ssh_configдостигну сервера bastion. Я скопировал ключ на этот сервер, и когда я подключаюсь к частной машине. В идеале я бы предпочел не иметь ключа на jump box, я поместил его туда только для того, чтобы убедиться, что сеть работает правильно.ssh [email protected] -i ~/.ssh/key.pem

решение1

С помощью ProxyCommand вы запускаете две совершенно отдельные команды ssh.

  1. который пытается использовать прокси-сервер для аутентификации на 10.0.0.175, поэтому вам не нужны ключи и конфигурация на бастионе.
  2. тот, который предоставляет прокси-сервер, которому нужно только иметь возможность пройти аутентификацию на бастионе.

Ваша команда для 1. работает нормально, но вы не видите отладочный вывод для 2. Поскольку вы использовали разрешимый TLD, а все остальное — обычная конфигурация, 2. не выдает никаких ошибок, но он не делает то, что вы хотите, потому что ему никогда не предоставлялись параметры IdentityFileи Userиз вашей конфигурации. Он аутентифицируется с другим ключом или пользователем и отклоняется bastion (и это справедливо).

Чтобы гарантировать, что 2. также считывает вашу конфигурацию, явно передайте эту опцию следующим образом:

# Servers in availability zone A
Host 10.0.0.*
  ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# Servers in availability zone B
Host 10.0.1.*
  ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/key.pem

# The bastion host itself
Host bastion.example.com
  User ubuntu
  IdentityFile ~/.ssh/key.pem
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

И все должно работать. Подтвердите с помощью:

ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175

Затем удалите -vvvобе формы 1 и 2. Если вы переместите свой /tmp/aws_bastion_ssh_configв расположение по умолчанию, обе -Fопции можно будет удалить (и ssh будет читать/etc/ssh/ssh_config и ~/.ssh/config files)

Связанный контент