Linuxの踏み台サーバ経由で、WindowsサーバにAnsibleを実行する方法

AWSではよくある下記にような構成で、Ansibleを実行する方法。playbookを実行するところがPCで、操作対象となるサーバがAWS上のWindowssshポートフォワーディングして接続します。

f:id:goodbyegangster:20190529042532p:plain


ローカルフォワーディングの設定

利用する ssh_config に、踏み台サーバの情報を記載します。

Host bastion-server
  HostName 53.XXX.XXX.XXX
  User ec2-user
  IdentityFile /mnt/c/work/sample.pem
  IdentitiesOnly yes
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null

下記コマンドを実行して、ローカルフォワーディングを実施。

$ ssh -F ssh_config -L 15986:192.168.100.1:5986 bastion-server

または、 ssh_configLocalForward のオプションを追加して、

Host bastion-server
  HostName 53.XXX.XXX.XXX
  (略)
  UserKnownHostsFile /dev/null
  LocalForward 15986 192.168.100.1:5986

踏み台サーバにssh接続する。

$ ssh -F ssh_config bastion-server

このsshセッションは繋いだままにします。


Ansible接続用の設定

利用するインベントリファイル hosts.yml を、以下のように作成します。

target_windows:
  hosts:
    localhost:
  vars:
    ansible_port: 15986
    ansible_user: Administrator
    ansible_password: Passw0rd
    ansible_connection: winrm
    ansible_winrm_server_cert_validation: ignore

設定されているパラメータにについては、以前の記事を参考。

WindowsサーバーにAnsibleから接続する

接続確認。

$ ansible -i hosts.yml -m win_ping
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

どうにかしたいこと

この方法では、Dynamic Inventoryの仕組みを利用できない。踏み台の向こうにいるWindowsサーバが増える都度、 ssh_config と インベントリファイル を更新していかないといけない。

なんとかできないものかと考え中。