Windows WinRM和Ansible的连接问题

Windows WinRM和Ansible的连接问题,windows,ansible,ntlm,winrm,Windows,Ansible,Ntlm,Winrm,我正在尝试连接到多个Windows节点,但遇到不同的错误。他们的行为都是一样的。我已经在其他环境中成功地做了很多次了,但在这种情况下,肯定有一些问题我找不到。如果相关的话,我的基础设施由一个Kubernetes集群组成,该集群由几个吊舱组成。其中一个pod有一个容器,我在其中安装了Ansible,我想从中与集群外的机器建立远程连接。下面我展示了我在其中一个节点中使其工作的所有尝试 首先,我运行了configureAnsibleformoting.ps1脚本来启动WinRM,以便Ansible可以

我正在尝试连接到多个Windows节点,但遇到不同的错误。他们的行为都是一样的。我已经在其他环境中成功地做了很多次了,但在这种情况下,肯定有一些问题我找不到。如果相关的话,我的基础设施由一个Kubernetes集群组成,该集群由几个吊舱组成。其中一个pod有一个容器,我在其中安装了Ansible,我想从中与集群外的机器建立远程连接。下面我展示了我在其中一个节点中使其工作的所有尝试

首先,我运行了configureAnsibleformoting.ps1脚本来启动WinRM,以便Ansible可以连接。WinRM配置显示已启用基本、Kerberos、协商和证书身份验证。还配置了HTTP和HTTPS侦听器:

为了检查所有设置是否正确,我进行了一些测试:

  • 运行测试WSMan

  • 从远程计算机登录powershell会话

  • 可以从容器访问节点

  • 我使用了Basic、NTLM和证书验证。以下是我的清单(我不使用域用户,而是使用本地用户)以及在每种情况下我与Ansible取得胜利时的结果:

    -基本:端口5986

    [prueba_cinco]
    host ansible_host=IP
    
    [prueba_cinco:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    
    [prueba_siete]
    host ansible_host=IP
    
    [prueba_siete:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    ansible_winrm_transport=ntlm
    

    -基本:端口5985

    [prueba_cinco]
    host ansible_host=IP
    
    [prueba_cinco:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_port=5985
    
    [prueba_siete]
    host ansible_host=IP
    
    [prueba_siete:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_transport=ntlm
    ansible_port=5985
    

    这是预期的行为,因为winrm配置中的AllowUnencrypted设置为false。 为了更深入地了解这个问题,我允许未加密的通信量,然后可以正常建立连接:

    -NTLM:端口5986

    [prueba_cinco]
    host ansible_host=IP
    
    [prueba_cinco:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    
    [prueba_siete]
    host ansible_host=IP
    
    [prueba_siete:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    ansible_winrm_transport=ntlm
    

    -NTLM:端口5985

    [prueba_cinco]
    host ansible_host=IP
    
    [prueba_cinco:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_port=5985
    
    [prueba_siete]
    host ansible_host=IP
    
    [prueba_siete:vars]
    ansible_user=user
    ansible_password=pass
    ansible_connection=winrm
    ansible_winrm_transport=ntlm
    ansible_port=5985
    

    这是可行的,尽管获得了巨大的误差。后来,我与域用户尝试了此选项,但凭据被拒绝

    -证书:端口5986(仅适用于HTTPS)

    对于这种方法,我遵循了官方文件的程序。我已在Powershell中使用新的SerfSignedcertificate生成了一个证书。然后,我使用OpenSSL将创建的PFX文件转换为私钥(也包含公钥)。最后,我已经将证书导入到证书存储并将证书映射到帐户

    [WINDOWS]
    host ansible_host=IP
    
    [WINDOWS:vars]
    ansible_connection='winrm'
    ansible_winrm_cert_pem='cert_win.pem'
    ansible_winrm_cert_key_pem='cert_win.pem'
    ansible_winrm_transport='certificate'
    ansible_winrm_scheme='https'
    ansible_winrm_server_cert_validation='ignore'
    

    正如您可能已经注意到的,当我尝试通过端口5986连接时,无论使用何种方法或凭据,我都会获得超时(读取超时)。我增加了执行超时,但结果是一样的。另一方面,端口5985似乎正常工作,但出现了与标头相关的错误,我不知道原因。无论如何,我只会使用这个作为最后一个选项,因为我需要使用端口5986

    为了确保容器配置不是导致这些问题的原因,我已经在另一个环境中部署了相同的映像,并且一切都正常工作。当我尝试连接到Windows节点时,我可以毫无错误地连接

    有人知道发生了什么吗

    先谢谢你