SSH ProxyCommand не работает с ansible_ssh_common_args

Вопрос или проблема

Я использую переходный сервер (сервер A) для доступа к серверу B.

Согласно документации Ansible здесь, у меня есть следующее:

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q [email protected]"'

Сервер B, скажем,: 10.0.2.54

Я запускаю:

ansible-playbook staging.yml -i staging_hosts --private-key=~/.ssh/mykeys.pem -vvvv

Результат:

fatal: [10.0.2.54]: UNREACHABLE! => {"changed": false, "msg": "Все элементы завершены", "results":
[{"item": ["openssl"], "msg": "ОШИБКА! SSH столкнулся с неизвестной ошибкой.
Вывод был:\nOpenSSH_6.2p2, OSSLShim 0.9.8r 8 Дек 2011\ndebug1:
Чтение конфигурационных данных /etc/ssh_config\r\ndebug1: /etc/ssh_config  строка 20: Применение опций для *\r\ndebug2:
ssh_connect: needpriv 0\r\ndebug1:
Выполнение прокси-команды: exec ssh -W 10.0.2.54:22 -q ec2- [email protected]\r\ndebug3:
таймаут: 10000 мс остается после подключения\r\ndebug3: Неверный идентификатор RSA1\r\ndebug3:
Не удалось загрузить \"/Users/me/.ssh/mykeys.pem\" как публичный ключ RSA1\r\ndebug1:
постоянно_удалить_suid: 501\r\ndebug1: файл идентификатора    /Users/me/.ssh/mykeys.pem типа -1\r\ndebug1:
файл идентификатора /Users/me/.ssh/mykeys.pem-cert типа -1\r\ndebug1:
Включение режима совместимости для протокола 2.0\r\ndebug1:
Строка локальной версии SSH-2.0-  OpenSSH_6.2\r\nssh_exchange_identification:
Соединение закрыто удаленным хостом\r\n", "unreachable": true}]}

Может быть, вам нужно определить SSH-ключ для переходного сервера A? Если это так, попробуйте изменить строку аргументов SSH на:

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q -i <путь_к_файлу_ключа_переходного_сервера> [email protected]"'

Ответ или решение

Проблема, с которой вы столкнулись, связана с использованием SSH через прокси (jump host) в Ansible. Судя по вашему сообщению, вы пытаетесь подключиться к серверу B (10.0.2.54) через сервер A, используя указанные параметры подключения. Ошибка, возникающая во время выполнения команды, может быть связана как с настройками SSH, так и с аутентификацией на промежуточном сервере.

Вот несколько шагов, которые помогут вам решить эту проблему:

1. Убедитесь в наличии ключа для промежуточного сервера

Ваше предположение о том, что вам может потребоваться указать ключ SSH для соединения с сервером A, вполне обосновано. Обновите параметры подключения следующим образом:

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q -i ~/.ssh/my_jumphost_key.pem ec2-<username>@<jumphost_ip>"'

Замените ~/.ssh/my_jumphost_key.pem на путь к вашему приватному ключу для доступа к серверу A, а также ec2-<username>@<jumphost_ip> на корректные имя пользователя и IP-адрес вашего промежуточного сервера.

2. Убедитесь в доступности сервера A

Выполните команду SSH вручную, чтобы проверить, можете ли вы подключиться к серверу A:

ssh -i ~/.ssh/my_jumphost_key.pem ec2-<username>@<jumphost_ip>

Если соединение не удается установить, проверьте настройки брандмауэра и доступность сервера A.

3. Проверьте доступность и настройки SSH к серверу B

После успешного подключения к серверу A проверьте, сможете ли вы подключиться к серверу B оттуда:

ssh -i ~/.ssh/mykeys.pem <username>@10.0.2.54

4. Информация для отладки

Убедитесь, что файловые права вашего ключа SSH настроены правильно. Он должен быть доступен только для чтения владельцу:

chmod 400 ~/.ssh/mykeys.pem
chmod 400 ~/.ssh/my_jumphost_key.pem

5. Проверка конфигурации SSH

Убедитесь, что в вашем ~/.ssh/config (если у вас есть этот файл) не настроены параметры, конфликтующие с вашими настройками прокси, так как он может переопределять параметры подключения.

Заключение

После внесения всех изменений попробуйте снова запустить вашу команду Ansible:

ansible-playbook staging.yml -i staging_hosts --private-key=~/.ssh/mykeys.pem -vvvv

Не забудьте заменить ~/.ssh/my_jumphost_key.pem, <username> и <jumphost_ip> на актуальные значения. Если проблема все еще будет возникать, приведите текст новой ошибки для дальнейшего анализа.

Оцените материал
Добавить комментарий

Капча загружается...