【Ansible Tower/AWX】WinRMが動かない時の対処方法まとめ


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible Tower・AWX リファレンス

Ansible実行環境に導入したWinRMが正常に動かない場合の対処方法をまとめてみました。
設定を変更する際は管理者ユーザーが必要となります。

エラーの例

Ansible AWX や Tower から、Windows機器へ接続する際に発生したエラーです。

下記のようなエラーが発生した場合は、後述の対処方法を確認してみて下さい。

{
    "unreachable": true,
    "msg": "ssl: HTTPSConnectionPool(host='10.0.2.15', port=5986): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f37475ae588>: Failed to establish a new connection: [Errno 111] Connection refused',))",
    "changed": false
}

下記のようなエラーが発生した場合は、「Windows機器のパスワードが設定されていない」参照。

fatal: [192.168.11.10]: UNREACHABLE! => {"changed": false, "msg": "basic: the specified credentials were rejected by the server", "unreachable": true}

下記のようなエラーが発生した場合は、「Ansible側にパスワードが設定されていない」参照。

fatal: [192.168.11.10]: UNREACHABLE! => {"changed": false, "msg": "basic: auth method basic requires a password", "unreachable": true}

Windowsホストの初期設定を行っていない

WinRMを導入し、Ansibleの設定が完了している場合でも、接続先のWindowsホストの設定が出来ていない場合は、接続することが出来ません。

下記を参考に初期設定を行ってください。

ログイン時の認証に失敗する

ジョブ実行時のSSH接続に失敗する場合は、AnsibleからWindowsホストに接続する際の認証に失敗している可能性があります。

コマンドライン版(CUI)のAnsibleであれば、インベントリファイル(hostsファイル)に記述している「ユーザー」「パスワード」を確認してみて下さい。

Ansible Tower/AWX(GUI)であれば、認証情報に登録している「ユーザー」「パスワード」を確認してみて下さい。

また、設定しているユーザーがドメインに所属している場合は、下記のようにドメインを指定することで認証に成功する場合もあります。
 例1:ユーザー名\ドメイン
 例2:ユーザー名@ドメイン

Windows機器のパスワードが設定されていない

接続先のWindows機器にパスワードが設定されていない場合、下記のようなエラーが発生します。

fatal: [192.168.11.10]: UNREACHABLE! => {"changed": false, "msg": "basic: the specified credentials were rejected by the server", "unreachable": true}

このようなエラーが発生した場合、Ansibleから接続するユーザー(AWX・Towerであれば、認証情報に設定しているユーザー)に、パスワードを設定する必要があります。
Windows機器に設定したパスワードは、Ansible側にも忘れずに反映しておきましょう。

Ansible側にパスワードが設定されていない

接続先のWindows機器にパスワードが設定されていても、Ansible側にパスワードが設定されていない場合、下記のようなエラーが発生します。

fatal: [192.168.11.10]: UNREACHABLE! => {"changed": false, "msg": "basic: auth method basic requires a password", "unreachable": true}

このようなエラーが発生した場合、Ansible側(AWX・Towerであれば、認証情報)に、Windows機器へのログインパスワードを設定して下さい。

HTTP接続に失敗する

WinRMでは、接続に「HTTP」か「HTTPS」を使用することが可能です。
HTTP接続は通常、無効化されているので、有効化する必要があります。

ネットワークプロファイルが「パブリック」か「パブリック以外(ドメイン・プライベート)」かにより、実行するコマンドが変わるので注意して下さい。

ネットワークプロファイル:パブリック

「winrm get winrm/config/client」を実行し、現在の設定を確認します。

PS C:\WINDOWS\system32> winrm get winrm/config/client
Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = false
    Auth
        Basic = true
        Digest = true
        Kerberos = true
        Negotiate = true
        Certificate = true
        CredSSP = false
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    TrustedHosts

「AllowUnencrypted」が「false」となっている場合は、HTTPが無効化されているので、有効化させます。

PS C:\WINDOWS\system32> winrm set winrm/config/Client '@{AllowUnencrypted="true"}'
Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = true
    Auth
        Basic = true
        Digest = true
        Kerberos = true
        Negotiate = true
        Certificate = true
        CredSSP = false
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    TrustedHosts

「AllowUnencrypted」が「true」となれば成功です。

ネットワークプロファイル:パブリック以外

「winrm get winrm/config/service」を実行し、現在の設定を確認します。

PS C:\WINDOWS\system32> winrm get winrm/config/service
Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = false
    Auth

「AllowUnencrypted」が「false」となっている場合は、HTTPが無効化されているので、有効化させます。

PS C:\WINDOWS\system32> winrm set winrm/config/Service '@{AllowUnencrypted="true"}'
Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = true
    Auth

「AllowUnencrypted」が「true」となれば成功です。

HTTPS接続に失敗する

HTTPS接続時に証明書を確認しようとして失敗する場合があります。

Ansibleのインベントリやテンプレート追加変数、ホスト変数のどこかに以下のパラメーターを設定することで回避できる場合があります。

Ansible(CUI)

ansible_winrm_server_cert_validation=ignore

Ansible Tower/AWX

ansible_winrm_server_cert_validation: ignore

ファイアウォールの穴あけを行っていない

Windowsホストのファイアウォールにより、接続が弾かれている場合があります。
その場合は、ファイアウォールを無効化するか、下記ポートの穴あけを行いましょう。

HTTPの場合:5985
HTTPSの場合:5986

PowerShellの実行可否設定が保護モードになっている

PowerShellの実行可否設定は、デフォルトで保護モードになっています。
これにより、接続に失敗している可能性があります。

まず、現在の設定を確認します。
「Restricted」となっている場合は保護モードになっています。

PS C:\WINDOWS\system32> Get-ExecutionPolicy
Restricted

下記コマンドで保護モードを解除します。
確認メッセージが表示されるので、「a」を入力して「Enter」で先に進みます。

PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): a

再度確認コマンドを実行し、「RemoteSigned」となっていることを確認します。

PS C:\WINDOWS\system32> Get-ExecutionPolicy
RemoteSigned

その他に有効そうなコマンド

詳細は不明ですが、以下コマンドを実行することで接続出来るようになった環境もありましたので、記載しておきます。

winrm set winrm/config/Service/auth '@{CbtHardeningLevel="relaxed"}'

以下は、ローカルでの疎通確認に使えます。
これらのコマンドが正常終了して、Ansibleからの接続に失敗する場合はネットワーク構成に問題がある可能性があります。

# HTTP接続確認用
winrm identify -r:http://localhost:5985 -auth:basic -u:ユーザー -p:パスワード -encoding:utf-8

# HTTPS接続確認用
winrm identify -r:https://localhost:5986 -auth:basic -u:ユーザー -p:パスワード -encoding:utf-8

記事は以上になります。

コメント

タイトルとURLをコピーしました