Как заставить Ansible использовать тот же SSH-порт, что и запущенный прокси-упаковщик SSH?

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

Похоже, упаковщик запускает ssh-прокси, который затем пересылает команды на мою удаленную машину через winrm (из логов):

packer: 2017/11/09 09:33:37 SSH proxy: serving on 127.0.0.1:45145

Чуть ниже я вижу это:

<127.0.0.1> ESTABLISH SSH CONNECTION FOR USER: root[0m
 <127.0.0.1> SSH: EXEC ssh -C -o ControlMaster=auto
-o ControlPersist=60s 
-o StrictHostKeyChecking=no 
-o 'IdentityFile="/tmp/ansible-key835953388"' 
-o KbdInteractiveAuthentication=no 
-o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no 
-o User=root 
-o ConnectTimeout=10 
-o ControlPath=/root/.ansible/cp/842df7d42c 127.0.0.1 'PowerShell -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -EncodedCommand <redacted>'
<127.0.0.1> (255, '', 'ssh: connect to host 127.0.0.1 port 22: Connection refused\r\n')

Я вижу очевидную проблему:

"SSH-прокси: обслуживается на 127.0.0.1:45145" ---> "ssh: подключение к хосту 127.0.0.1, порт 22"

Packer каждый раз использует «случайный» порт, а ansible использует порт по умолчанию.

Как заставить упаковщик использовать тот же порт, что и ansible?


person Neil Trodden    schedule 09.11.2017    source источник
comment
Не могли бы вы объяснить, почему вам это нравится?   -  person Rickard von Essen    schedule 09.11.2017
comment
Потому что мне нужен ansible, чтобы иметь возможность подключиться к прокси-серверу SSH, который запустил упаковщик - в данный момент он не может, так как использует другой порт.   -  person Neil Trodden    schedule 09.11.2017
comment
Следовали ли вы инструкциям здесь packer.io/docs/provisioners/ansible. html#winrm-communicator и указали ли вы communicator: winrm в своем шаблоне. Очень трудно понять вашу проблему, если вы не предоставите свои template.json или очень подробно объясните каждую деталь.   -  person Rickard von Essen    schedule 09.11.2017


Ответы (1)


Похоже, мне просто нужно было указать параметр конфигурации для упаковщика:

https://www.packer.io/docs/provisioners/ansible.html#local_port

local_port (строка) — порт, на котором нужно попытаться прослушивать соединения SSH. Это значение является отправной точкой. Поставщик попытается прослушивать соединения SSH на первом доступном из десяти портов, начиная с local_port. Выбранный системой порт используется, когда local_port отсутствует или пуст.

person Neil Trodden    schedule 09.11.2017