かべぎわブログ

技術的なことについてかけたらいいな…

ansible_ssh_common_argsをつかって踏み台経由でAnsibleを実行する

概要

ansible_ssh_common_argsを利用して踏み台を経由して、外部においてあるAnsibleからだと直接接続できないサーバの構成管理をしてみたいと思います。

構成

構成としてはこんなかんじ。
仕事でつかうようなかんじだとよくあると思う。

f:id:kabegiwakun:20190123220008p:plain

外部のAnsibleから直接Private Subnetのターゲットにはいけない。
ので踏み台を経由してAnsibleを実行させたい。みたいなかんじ。

踏み台経由でAnsibleを実行するやりかた

varsでansible_ssh_common_argsにsshのProxyCommandオプション指定してあげます。
たとえばこんなかんじ。

ansible_ssh_common_args: '-o ProxyCommand="ssh -i ~/.ssh/wawawa-key.pem -W %h:%p -q ec2-user@fumidai"'

fumidai = 踏み台

これを指定してあげるとAnsibleでssh接続する際にこのオプションがわたされてsshが実行されます。
こんなかんじのsshコマンドが実行されるようなイメージ

$ ssh -i ~/.ssh/wawwa-key.pem -o ProxyCommand="ssh -i ~/.ssh/wawawa-key.pem -W %h:%p -q ec2-user@fumidai" ec2-user@target

実際に動かしてみる

こんなかんじのplaybookを用意して
(target = ターゲット = 172.140.1.1)

---
- hosts: target
  tasks:
    - shell: hostname

実行してみる。

$ ansible-playbook -i ./inventory ./wawawa.yml -v
Using /etc/ansible/ansible.cfg as config file

PLAY [target] *******************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
ok: [172.140.1.1]

TASK [shell] ********************************************************************************************************
changed: [172.140.1.1] => {"changed": true, "cmd": "hostname", "delta": "0:00:00.004882", "end": "2019-01-17 02:55:57.259068", "rc": 0, "start": "2019-01-17 02:55:57.254186", "stderr": "", "stderr_lines": [], "stdout": "target", "stdout_lines": ["target"]}

PLAY RECAP **********************************************************************************************************
172.140.1.1               : ok=2    changed=1    unreachable=0    failed=0   

無事にPrivate Subnetにあるtargetに外部のAnsibleからhostnameコマンドがとおりました!

おわりに

べんりべんり

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)