在堡垒后向Windows主机进行Ansible部署

War*_*enG 10 amazon-web-services ansible

我目前已成功使用Ansible在AWS专用子网中的主机上运行任务,以下内容已在其中group_vars设置:

ansible_ssh_common_args: '-o ProxyCommand="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q ec2-user@bastionhost@example.com"'
Run Code Online (Sandbox Code Playgroud)

一切正常。

对于不在私有子网中的Windows实例,可以进行以下group_vars工作:

---
ansible_user: "AnsibleUser"
ansible_password: "Password"
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
Run Code Online (Sandbox Code Playgroud)

现在,仅通过使用ProxyCommand将无法使Ansible部署到堡垒后面的Windows服务器上就行了-据我所知。我相信尽管有一个可以使用的新协议/模块psrp。

我想group_vars我的Windows主机需要更改为以下内容:

---
ansible_user: "AnsibleUser"
ansible_password: "Password"
ansible_port: 5986
ansible_connection: psrp
ansible_psrp_cert_validation: ignore
Run Code Online (Sandbox Code Playgroud)

如果仅对公开可用的实例进行上述更改(并且不尝试通过堡垒连接),则我的任务似乎正常运行:

Using module file /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/modules/windows/win_shell.ps1
<10.100.11.14> ESTABLISH PSRP CONNECTION FOR USER: Administrator ON PORT 5986 TO 10.100.11.14
PSRP: EXEC (via pipeline wrapper)
Run Code Online (Sandbox Code Playgroud)

我知道必须进行更多更改,然后才能在堡垒后面的Windows服务器上尝试此操作,但无论如何都要运行它以查看出现的错误,以为下一步提供提示。在堡垒服务器后面的实例上运行此命令时,结果如下:

Using module file /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/modules/windows/setup.ps1
<10.100.11.14> ESTABLISH PSRP CONNECTION FOR USER: Administrator ON PORT 5986 TO 10.100.11.14
The full traceback is:
.
.
.
.
ConnectTimeout: HTTPSConnectionPool(host='10.100.11.14', port=5986): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x110bbfbd0>, 'Connection to 10.100.11.14 timed out. (connect timeout=30)'))
Run Code Online (Sandbox Code Playgroud)

似乎Ansible忽略了我group_varsProxyCommand-我不确定这是否是预期的。我也不确定下一步如何使Ansible部署到堡垒后的Windows服务器。

我缺少什么配置?

xen*_*nlo 2

文档,该ansible_ssh_common_args设置被附加到 sftp、scp 和 ssh 命令中。winrm所以对我来说,在使用or时没有考虑到这听起来很正常psrp ansible_connection

正如Pouyan在评论中提供的链接ansible_psrp_proxy中所解释的,变量将用于提供代理信息。

ansible_connection: psrp
ansible_psrp_proxy=socks5h://localhost:1234
Run Code Online (Sandbox Code Playgroud)

有关创建袜子代理的更多信息,请访问:https://www.bloggingforlogging.com/2018/10/14/windows-host-through-ssh-bastion-on-ansible/