ホーム > 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のインベントリやテンプレート追加変数、ホスト変数のどこかに以下のパラメーターを設定することで回避できる場合があります。
ファイアウォールの穴あけを行っていない
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
記事は以上になります。
コメント