Ошибка при использовании Windows Server в качестве хоста SSH для Ansible
Я пытаюсь настроить компьютер с Windows Server 2019 в качестве хоста SSH для Ansible, используя функцию OpenSSH Windows. Ansible работает на моем локальном компьютере с Windows 11 в WSL2.
Я использую аутентификацию по паролю для SSH-соединения. SSH-соединение с jumphost работает нормально. Проблема возникает, когда я пытаюсь запустить книгу воспроизведения Ansible, которая использует этот компьютер с Windows в качестве хоста jumphost. Я получаю следующую ошибку:
fatal: [windows_jumphost]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to create temporary directory. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo C:/ansible-test `\"&& mkdir \"` echo C:/ansible-test/ansible-tmp-1694695752.0674007-2979-106690247965455 `\" && echo ansible-tmp-1694695752.0674007-2979-106690247965455=\"` echo C:/ansible-test/ansible-tmp-1694695752.0674007-2979-106690247965455 `\" ), exited with result 1",
"unreachable": true
}
Пользователь, который используется для подключения к jumphost, имеет права администратора.
Это мой файл инвентаризации Ansible (формат yaml):
---
all:
children:
jumphosts:
hosts:
windows_jumphost:
ansible_host: <jumphost_IP>
ansible_connection: ssh
ansible_port: 22
ansible_remote_tmp: 'C:/ansible-test'
ansible_user: <my_username>
ansible_password: <my_password>
targets:
hosts:
mikrotik_router:
ansible_host: <router_IP>
ansible_connection: network_cli
ansible_network_os: routeros
ansible_ssh_common_args: '-o ProxyJump=<my_username>@<jumphost_IP>'
Ansible сообщает, что задача подключения к jumphost не удалась, и переходит к следующей задаче (резервное копирование маршрутизатора), которая выполняется успешно, что означает, что она подключилась напрямую к маршрутизатору, а не через jumphost.
Я пробовал много разных комбинаций в файле инвентаря, но всегда получаю одну и ту же ошибку.
Пожалуйста помоги! Заранее спасибо!
1 ответ
Раньше я делал нечто подобное с WSL, Ansible и jumphosts:
- Я использовал Ansible в Ubuntu на WSL2 для управления другими экземплярами WSL как в моей локальной системе, так и в других системах Windows.
- Я использовал сервер OpenSSH на каждом хосте Windows 10/11 в качестве узла перехода для доступа к локальным экземплярам WSL2, работающим под ним (обратите внимание, что этот метод больше не работает в последних выпусках WSL).
Однако несколько лет назад я отказался от этого метода. Тем не менее, у меня все еще есть репозиторий Ansible, поэтому я вернулся, чтобы посмотреть, сможет ли он генерировать какие-либо идеи, которые могли бы вам помочь. К сожалению, я думаю , что ваша попытка очень близка к тому, что сработало для меня. Однако я укажу на различия на всякий случай, если они помогут:
Мой
common_args
использует конфигурацию Jumphost старого стиля:ansible_ssh_common_args: -o "ProxyCommand ssh -W %h:%p {{ windows_host }}" -o "StrictHostKeyChecking=no"
The
windows_host
В моем случае переменная определяется для каждой цели, но в вашем случае в этом нет необходимости, поскольку все, что у вас есть, — это один IP-адрес. Конечно, этот вызов должен быть таким же, как и в новом стиле.-o ProxyJump=<my_username>@<jumphost_IP>
который вы используете.У меня есть
ansible_ssh_use_tty: true
, который, как мне казалось, я запомнил как необходимый по какой-то причине. Однако, когда я проверил документацию по этой опции, оказалось, что это значение по умолчанию . Если так, то, конечно, это не должно иметь значения.
Кроме того, вы можете попробовать настроить конфигурацию jumphost с помощью специального имени хоста. Например (непроверено, но по памяти + информация из старых конфигов):
~/.ssh/config
:
Host microtik_via_jumphost # Can be whatever you want
Hostname <router_IP>
ProxyJump <jumphost_IP>
inventory.yaml
изменения:
ansible_host: microtik_via_jumphost
ansible_connection: network_cli
ansible_network_os: routeros