Ansible:配置 Windows 主机

Ansible:配置 Windows 主机

我正在尝试使用 mac M1 通过 VM 设置 Windows 主机,但遇到了以下问题:

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 \~/.ansible/tmp"&& mkdir "echo \~/.ansible/tmp/ansible-tmp-1673021425.449706-14817-109103252041296" && echo ansible-tmp-1673021425.449706-14817-109103252041296="echo \~/.ansible/tmp/ansible-tmp-1673021425.449706-14817-109103252041296" ), exited with result 1", "unreachable": true}

我尝试通过清单、环境变量设置远程 tmp,但问题仍然存在。我还尝试通过 SSH 和 WinRM 进行设置,但问题仍然存在。

我之前用过其他一些主机(包括 Windows),它们运行良好,但这次我搞不清楚为什么它们不工作了。我宁愿找到解决方案,也不愿创建新​​的虚拟机。

答案1

在主机文件(不是配置文件)中添加以下行。

[windows:vars]
remote_tmp = C:\Users\ans_user\Tmp
become_method = runas
ansible_shell_type = powershell
shell_type = powershell

答案2

连接到远程主机后、运行所需命令之前,Ansible 所做的第一件事就是创建一些临时文件夹。

正如你在错误消息中看到的那样,Ansible 尝试创建这些临时文件夹使用 Linux 命令(umask、mkdir 等)。这就是问题所在!这些命令在 Windows 主机上不存在。

为什么 Ansible 认为主机“无法访问”,而实际上它能够连接、验证并运行命令(尽管这些命令不是目标平台的正确命令)?不知道,但这绝对具有误导性(即:该问题与网络完全无关)

无论如何,你必须明确地告诉 Ansible 您的远程主机是 Windows,这样它就不会错误地假设 Linux shell。控制使用哪个 shell 的 Ansible 变量是ansible_shell_type,您可以在临时命令和清单文件中使用它。

ansible_shell_type在 Windows 世界中,两个可能的值是命令或者电源外壳。使用哪一个取决于您如何设置 Windows 主机。如果您安装了 Windows内置 SSH 服务器它默认为命令除非你创建了一个特定注册表项启用电源外壳

Ansible文档涵盖了这一主题。

以下是运行默认 SSHd 的 Windows 主机的临时示例(即:命令) 使用密码验证(主机名后的逗号很重要!):

ansible all -i winhost, -u winuser -k -e ansible_shell_type=cmd -m win_ping

等效库存示例:

[windows]
winhost

[windows:vars]
ansible_connection=ssh
ansible_user=winuser
ansible_password=winuserpassword
ansible_shell_type=cmd

答案3

我在从 Debian 中央服务器连接到装有 Windows Pro 的远程主机时遇到了同样的问题,我做了各种修改,例如通过临时 ansible 命令 WindowsClient -m ping 或通过自动剧本我试图 ping 但它引发了一系列错误,在 inventory.yml 文件中我已经做了相应的修改,现在它抛出了我发送的附件中出现的错误,我也将我的库存作为附件发送,我将不胜感激您的指导。

在此处输入图片描述

在此处输入图片描述

相关内容