【问题标题】:How do I get Ansible to use the same SSH port as the SSH proxy packer has launched?如何让 Ansible 使用与 SSH 代理打包程序启动时相同的 SSH 端口?
【发布时间】:2018-04-22 07:12:54
【问题描述】:

我在 docker 容器中运行 packer 以在 AWS 中配置 Windows 服务器。我正在使用 winrm 连接到打包器构建器,但是在打包器构建中运行 ansible playbook 步骤时遇到了问题。

packer 似乎启动了一个 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 使用的是默认端口。

如何让 packer 使用与 ansible 相同的端口?

【问题讨论】:

  • 你能解释一下你为什么会这样吗?
  • 因为我需要 ansible 才能连接到 packer 启动的 SSH 代理 - 目前它不能,因为它使用不同的端口。
  • 您是否按照此处的说明进行操作 packer.io/docs/provisioners/ansible.html#winrm-communicator 并在模板中指定了 communicator: winrm。如果您不提供template.json 或仔细解释每个细节,真的很难理解您的问题。

标签: ansible ansible-2.x packer winrm


【解决方案1】:

看起来我只需要为打包程序提供一个配置设置:

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

local_port (string) - 尝试侦听 SSH 连接的端口。这个值是一个起点。供应商将尝试在十个端口中的第一个可用端口上侦听 SSH 连接,从 local_port 开始。当 local_port 缺失或为空时使用系统选择的端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2017-11-06
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多