AWSではよくある下記にような構成で、Ansibleを実行する方法。playbookを実行するところがPCで、操作対象となるサーバがAWS上のWindows、sshポートフォワーディングして接続します。
ローカルフォワーディングの設定
利用する 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_config
に LocalForward
のオプションを追加して、
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
設定されているパラメータにについては、以前の記事を参考。
接続確認。
$ ansible -i hosts.yml -m win_ping localhost | SUCCESS => { "changed": false, "ping": "pong" }
どうにかしたいこと
この方法では、Dynamic Inventoryの仕組みを利用できない。踏み台の向こうにいるWindowsサーバが増える都度、 ssh_config と インベントリファイル を更新していかないといけない。
なんとかできないものかと考え中。