Windows に関するよくある質問 (FAQ)

ここでは、Ansible および Windows に関するよくある質問とその回答を紹介します。

注釈

本ガイドでは、Ansible を使用した Microsoft Windows サーバーの管理に関する質問について説明します。Ansible Core に関する質問は、「一般的な FAQ ページ」を参照してください。

Ansible は、Windows XP または Server 2003 で動作しますか

Ansible は、Windows XP または Server 2003 ホストでは動作しません。Ansible は、以下の Windows オペレーティングシステムバージョンで動作します。

  • Windows Server 2008 1

  • Windows Server 2008 R2 1

  • Windows Server 2012

  • Windows Server 2012 R2

  • Windows Server 2016

  • Windows Server 2019

  • Windows 7 1

  • Windows 8.1

  • Windows 10

1 - 詳細は、Server 2008 FAQ を参照してください。

また、Ansible には PowerShell の最小バージョン要件があります。最新情報は「Windows ホストのセットアップ」を参照してください。

Server 2008、2008 R2、Windows 7 に対応していますか

Microsoft は 2020 年 1 月 14 日にこれらのバージョンの Windows の Extended Support を終了し、Ansible は 2.10 のリリースで公式サポートを終了しました。これらのオペレーティングシステムを対象とした新機能の開発は今後行われず、自動テストも終了しています。しかし、既存のモジュールや機能は引き続き動作する可能性があり、これらの Windows バージョンに関する問題を解決するための簡単なプル要求は承認される可能性があります。

Ansible で Windows Nano Server を管理できますか

Ansible は現在、Windows Nano Server では動作しません。これは、大部分のモジュールや内部コンポーネントで使用されている完全な .NET フレームワークにアクセスできないためです。

Ansible は Windows で実行できますか

いいえ、Ansible は Windows ホストのみを管理できます。Ansible は Windows ホスト上ではネイティブに実行できませんが、Windows Subsystem for Linux (WSL) の下で実行できます。

注釈

Windows Subsystem for Linux は Ansible ではサポートされていないため、実稼働システムには使用しないでください。

WSL に Ansible をインストールするには、bash ターミナルで以下のコマンドを実行します。

sudo apt-get update
sudo apt-get install python3-pip git libffi-dev libssl-dev -y
pip install --user ansible pywinrm

WSL のリリースではなくソースから Ansible を実行するには、インストールした pip をアンインストールし、git リポジトリーのクローンを作成します。

pip uninstall ansible -y
git clone https://github.com/ansible/ansible.git
source ansible/hacking/env-setup

# To enable Ansible on login, run the following
echo ". ~/ansible/hacking/env-setup -q' >> ~/.bashrc

WSL 上で Ansible を実行したときにタイムアウトエラーが発生する場合は、sleep が正しく返されない問題が原因となっている可能性があります。以下の回避策により、この問題が解決される場合があります。

mv /usr/bin/sleep /usr/bin/sleep.orig
ln -s /bin/true /usr/bin/sleep

別のオプションとして、ビルド 2004 よりも Windows 10 以上を実行している場合は WSL 2 を使用します。

wsl --set-default-version 2

SSH キーを使用して Windows ホストへの認証を行うことはできますか

WinRM または PSRP connection プラグインで SSH 鍵を使用することはできません。これらの connection プラグインは、認証に SSH が使用する SSH キーペアを使用する代わりに、X509 証明書を使用します。

X509 証明書が生成され、ユーザーにマッピングされる方法は、SSH の実装とは異なります。詳細は、Windows リモート管理 のドキュメントを参照してください。

Ansible 2.8 には、認証に SSH 鍵を使用する SSH connection プラグインを Windows サーバーで使用する実験的なオプションが追加されました。詳細は「this question」を参照してください。

Ansible で機能しないコマンドをローカルで実行できるのはなぜですか

Ansible は、WinRM を介してコマンドを実行します。これらのプロセスは、以下の方法でローカルでコマンドを実行するのとは異なります。

  • CredSSP や Kerberos のような認証オプションを使用して、認証情報の委譲を行っていない限り、WinRM プロセスにはユーザーの認証情報をネットワークリソースに委譲する機能がなく、Access is Denied エラーが発生します。

  • WinRM で実行されるすべてのプロセスは、非対話型セッションです。対話型セッションを必要とするアプリケーションは機能しません。

  • WinRM を介して実行する場合、Windows は、一部のインストーラーやプログラムが依存している Windows Update API や DPAPI などの Windows 内部 API へのアクセスを制限します。

これらの制限を回避する方法は次のとおりです。

  • become を使用すると、ローカルで実行するときと同じようにコマンドを実行できます。become を使用すると、Windows はプロセスが WinRM の下で実行していることに気づかないため、ほとんどの WinRM の制限を回避することができます。詳細は、権限昇格の理解: become のドキュメントを参照してください。

  • win_scheduled_task で作成できる、スケジュールされたタスクを使用します。become と同様に、WinRM の制限をすべて回避できますが、モジュールではなくコマンドの実行にのみ使用できます。

  • win_psexec を使用してホストでコマンドを実行します。PSExec は WinRM を使用しないため、あらゆる制限を回避することができます。

  • これらの回避策を取らずにネットワークリソースにアクセスするには、認証情報の委譲を有効にした CredSSP または Kerberos を使用することができます。

become の使用方法に関する詳細は、「権限昇格の理解: become」を参照してください。Windows リモート管理 の制限のセクションには、WinRM 制限の詳細が記載されています。

このプログラムが、Ansible がインストールされている Windows にはインストールされません

WinRMの制限の詳細は、「こちらの質問」を参照してください。

どのような Windows モジュールが利用できますか

Ansible Core の Ansible モジュールの多くは、Linux/Unix マシンと任意の Web サービスの組み合わせを想定して記述されます。これらのモジュールは Python で記述されており、そのほとんどが Windows では動作しません。

このため、PowerShell で記述されており、Windows ホストで実行することを目的としている専用の Windows モジュールがあります。これらのモジュールの一覧は、「here」にあります。

次の Ansible Core モジュールおよびアクションプラグインは、Windows で動作します。

  • add_host

  • assert

  • async_status

  • debug

  • fail

  • fetch

  • group_by

  • include

  • include_role

  • include_vars

  • meta

  • pause

  • raw

  • script

  • set_fact

  • set_stats

  • setup

  • slurp

  • template (win_template も同様)

  • wait_for_connection

Ansible Windows モジュールは、Ansible.WindowsCommunity.Windows、および Chocolatey.Chocolatey コレクションに存在します。

Windows ホストで Python モジュールを実行できますか

できません。WinRM 接続プロトコルは PowerShell モジュールを使用するように設定されているため、Python モジュールは動作しません。この問題を回避するには、delegate_to: localhost を使用して Ansible コントローラー上で Python モジュールを実行する方法があります。これは、Playbook 中に外部サービスに接続する必要があり、同等の Windows モジュールがない場合に便利です。

SSH 経由で Windows ホストに接続できますか

Ansible 2.8 には、SSH connection プラグインを使用して Windows ホストを管理する実験的なオプションが追加されました。Windows ホストに SSH 接続するには、Microsoft と共同で開発中の Win32-OpenSSH フォークを Windows ホストにインストールして設定する必要があります。基本的な機能のほとんどは SSH で動作するはずですが、Win32-OpenSSH はリリースごとに新機能が追加されたり、バグが修正されたりと、急速に変化しています。Windows ホストで Ansible を使用する際には、GitHub Releases ページから Win32-OpenSSH の最新リリースを インストール することが強く推奨されます。

Windows ホストへの接続に SSH を使用するには、インベントリーに以下の変数を設定します。

ansible_connection=ssh

# Set either cmd or powershell not both
ansible_shell_type=cmd
# ansible_shell_type=powershell

ansible_shell_type の値は、cmd または powershell のいずれかでなければなりません。SSH サービスで DefaultShell が設定されていない場合は cmd を使用して、DefaultShell として設定されている場合は powershell を使用してください。

SSH を介した Windows ホストへの接続に失敗するのはなぜですか?

上記のように Win32-OpenSSH を使用している場合を除き、Windows ホストへの接続には Windows リモート管理 を使用する必要があります。Ansible の出力で SSH が使用されたと表示された場合は、接続バーが正しく設定されていないか、ホストに正しく継承されていません。

Windows ホストのインベントリーに ansible_connection: winrm が設定されていることを確認してください。

認証情報が拒否されるのはなぜですか

これは、誤った認証情報とは無関係の、多種多様なものが原因である可能性があります。

この現象の詳細については、Windows ホストのセットアップ の「HTTP 401/認証情報の拒否」を参照してください。

SSL CERTIFICATE_VERIFY_FAILED エラーが発生するのはなぜですか

Ansible コントローラーが Python 2.7.9 以降または SSLContext をバックポートした古いバージョンの Python (RHEL 7 の Python 2.7.5 など) で動作している場合、コントローラーは WinRM が HTTPS 接続に使用している証明書を検証しようとします。証明書を検証できない場合 (自己署名証明書の場合など) は、検証プロセスに失敗します。

証明書の検証を無視するには、Windows ホストのインベントリーに ansible_winrm_server_cert_validation: ignore を追加してください。

参考

Windows Guides

Windows ドキュメントの目次

Ansible Playbook

Playbook の概要

Ansible のヒントと裏技

Playbook のヒントと裏技

User Mailing List

ご質問はございますか。Google Group をご覧ください。

リアルタイムチャット

Ansible チャットチャンネルへの参加方法