AnsibleをWindowsに接続する
お疲れ様です。伊藤です。
昨日Ansibleのインストールを行いましたので、本日はAnsible(管理サーバ)側からWindows(管理対象サーバ)側への接続を行います。
その前にLinux(管理対象サーバ)側への接続確認も行いましょう。Ansibleのインストールが終わっていればそのままAnsibleのコマンドで接続することができる(はず)です。/etc/ansibleに移動して、hostsファイルを編集します。
# cd /etc/ansible # vi hosts
追加する内容は下記のような感じになります。
[linux] 【LinuxサーバのIP】
【】の中は該当する値に書き換えてください。その後下記コマンドでpingの疎通確認ができます。
# ansible linux -i hosts -m ping
下記の結果が出れば疎通はOKです。
192.168.1.105 | SUCCESS => { "changed": false, "ping": "pong" }
例えば管理対象サーバ(ここでは192.168.1.105)が起動していないと下記のようなメッセージが出ます。
192.168.1.105 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.105 port 22: Connection timed out\r\n", "unreachable": true }
ここまでがLinuxへの疎通確認です。
ここから本題のWindows側への接続を行います。Windowsの接続までの流れですが、管理サーバ(Ansible)側の作業と管理対象サーバ(Windows)側に分かれます。簡単に整理すると以下のような流れです。
【管理サーバ側作業】
- (1)pipインストール
- (2)pywinrmインストール
【管理対象サーバ側作業】
- (3)接続設定用シェル実行
【管理サーバ側作業】
- (4)変数設定
- (5)接続コマンド実行
それでは(1)pipインストールからやっていきましょう。インターネットがつながる環境であれば下記コマンドでpipのインストールが始まります。
# curl -sL https://bootstrap.pypa.io/get-pip.py | python
インターネットにつながらない環境であれば別途get-pip.pyファイルをダウンロードしてサーバにファイルをアップロード後にpythonで実行してください。下記のような表示が出ればインストール成功です。
Collecting pip Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB) 100% |????????????????????????????????| 1.3MB 623kB/s Collecting wheel Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB) 100% |????????????????????????????????| 71kB 5.1MB/s Installing collected packages: pip, wheel Successfully installed pip-9.0.1 wheel-0.29.0
※インターネット環境がない場合、get-pip.pyの中で外部に接続してそうなのでやっぱり失敗するかもです。ごめんなさい。
続いて、(2)pywinrmインストールです。pywinrmとはpythonのモジュールでwinrmへ接続するための機能になります。先ほどのpipはこれを入れるための準備です。pipを使ってpywinrmをインストールします。こちらもインターネット接続が必要になります。まずは下記コマンドでpywinrmがインストールされていないことを確認します。
# pip list
インストールされているpythonの機能が出ますが、ここにpywinrmがいないことを確認してください。確認後下記コマンドでpywinrmをインストール。
# pip install pywinrm
下記のような表示が出ればインストール完了です。
Collecting pywinrm Downloading pywinrm-0.2.2-py2.py3-none-any.whl Collecting requests>=2.9.1 (from pywinrm) Downloading requests-2.18.1-py2.py3-none-any.whl (88kB) 100% |????????????????????????????????| 92kB 5.2MB/s Collecting xmltodict (from pywinrm) Downloading xmltodict-0.11.0-py2.py3-none-any.whl Requirement already satisfied: six in /usr/lib/python2.7/site-packages (from pywinrm) Collecting requests-ntlm>=0.3.0 (from pywinrm) Downloading requests_ntlm-1.0.0-py2.py3-none-any.whl Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.9.1->pywinrm) Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB) 100% |????????????????????????????????| 143kB 4.3MB/s Collecting certifi>=2017.4.17 (from requests>=2.9.1->pywinrm) Downloading certifi-2017.4.17-py2.py3-none-any.whl (375kB) 100% |????????????????????????????????| 378kB 2.3MB/s Collecting idna<2.6,>=2.5 (from requests>=2.9.1->pywinrm) Downloading idna-2.5-py2.py3-none-any.whl (55kB) 100% |????????????????????????????????| 61kB 5.5MB/s Collecting urllib3<1.22,>=1.21.1 (from requests>=2.9.1->pywinrm) Downloading urllib3-1.21.1-py2.py3-none-any.whl (131kB) 100% |????????????????????????????????| 133kB 4.7MB/s Collecting ntlm-auth>=1.0.2 (from requests-ntlm>=0.3.0->pywinrm) Downloading ntlm_auth-1.0.5-py2.py3-none-any.whl Collecting ordereddict (from ntlm-auth>=1.0.2->requests-ntlm>=0.3.0->pywinrm) Downloading ordereddict-1.1.tar.gz Building wheels for collected packages: ordereddict Running setup.py bdist_wheel for ordereddict ... done Stored in directory: /root/.cache/pip/wheels/cf/2c/b5/a1bfd8848f7861c1588f1a2dfe88c11cf3ab5073ab7af08bc9 Successfully built ordereddict Installing collected packages: chardet, certifi, idna, urllib3, requests, xmltodict, ordereddict, ntlm-auth, requests-ntlm, pywinrm Successfully installed certifi-2017.4.17 chardet-3.0.4 idna-2.5 ntlm-auth-1.0.5 ordereddict-1.1 pywinrm-0.2.2 requests-2.18.1 requests-ntlm-1.0.0 urllib3-1.21.1 xmltodict-0.11.0
pywinrmを入れるために関連する機能もインストールされます。これがあるのでインターネット環境がないとかなりインストールは辛いです。以前私はpipを入れずにpywinrmをインストールしたことがありますが、その際にはpythonモジュールをrpm化して強引に入れました。もしかしたらもっと簡単な方法があるかもしれないので、探してみてください。。(無責任)
とりあえず、pywinrmが入れ終わったら下記コマンドで確認します。
# pip list
pywinrmが追加されているはずです。
pywinrm (0.2.2)
続いてWindows側の作業(3)接続設定用シェル実行です。まずは実行するファイルを取得します。Githubにあるのでそこからとってきます。面倒な場合は下記URLを見てコピペでファイルを作っちゃってもOK。
https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
ConfigureRemotingForAnsible.ps1を入手出来たらWindowsサーバにアップロードしてください。その後、windows側でPowershellのコンソールを管理者権限で開き、下記コマンドで実行します。
powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1
下記のような表示が出ればOKです。
次にまたAnsible側に戻っての作業(4)変数設定です。/etc/ansibleにあるhostsに手を加えます。
# cd /etc/ansible # vi hosts
下記の内容を追加しましょう。
[windows] 【WindowsサーバのIP】 [windows:vars] ansible_ssh_user=【WindowsにログインするユーザID】 ansible_ssh_pass=【Windowsにログインするパスワード】 ansible_ssh_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
【】の中は該当する値に書き換えてください。
最後に(5)接続コマンド実行で疎通確認します。下記コマンドを実行してください。
# ansible windows -i hosts -m win_ping
下記表示が出ればOKです。お疲れ様でした。
192.168.1.110 | SUCCESS => { "changed": false, "ping": "pong" }