Ansibleを踏み台サーバ越しに実行する方法

執筆日:

更新日:

Ansibleを使ってどんどん構築の自動化を進めている。 すすめていくと、Ansibleを実行する端末からネットワーク的に直接届かないサーバに対してプロビジョニングしたいケースがでてくる。そこで、踏み台サーバ越しにAnsibleでプロビジョニングしていくことを試してみる。

環境

KVMを使って仮想のゲストサーバを立てたが、
ゲストサーバはホストサーバと通信する用の(外に出る場合にはNAT通信)IPアドレスしか持っていない状況で、 Ansibleの実行対象としたかったのが背景。

ホストサーバに直接Ansibleをインストールして実行するわけにもいかず、ホストサーバを踏み台にして、 Ansibleを実行することがやりたかったこと。

f:id:mosuke5:20150925232414p:plain

SSHの設定ファイルを作る

"Ansibleで" と書いたが要はSSHです。Ansibleのコネクションの方法はいくつかありますが、SSHを使っている。
まずはSSHで踏み台サーバを経由してAnsible実行対象サーバへ接続できるように準備しました。
技術を検証するときの重要なポイントですが、その仕組みが何で実現されているかわかると、このように検証項目を分解することができてデバッグなどにも役立ちますね。

これはいわゆる「多段SSH」というやつで、以下のブログの最後にも書いた内容です。

一般的には~/.ssh/configにこういった設定は書いたりもしますが、
Ansible実行の場合、特定の端末に依存したくなかったので、
ansible-playbookのレポジトリに別途ファイルを作るって管理することにしました。
なぜ特定の端末に依存したくなかったかというと、一人で利用する場合には良いのですが、複数人での運用環境の場合、ことなる環境でAnsibleのplaybookを実行しなければいけないことがあったからです。

## sshconfigという名前のファイルにした
Host ansible-target
    HostName 192.168.33.10
    User xxxxx
    ProxyCommand ssh -W %h:%p yyyyy@hostserver 

上記のファイルを使って多段SSHできることを確認します。 こちらで、問題なくターゲットのホストにSSH接続できれば問題なしです。

$ ssh -F sshconfig ansible-target

Ansible実行時にSSH設定ファイルを利用する

ここまで来たらとても簡単です。
Ansibleには、Ansible実行時の設定を管理するansible.cfgという設定ファイルを利用することができます。非常に便利なので活用方法は覚えておくといいです。
そのansible.cfgに下記を追記し、ansible実行時に上記のsshconfigを読み込まれるようにすることで踏み台越しにAnsibleを実行することができます。

# ansible.cfg
[ssh_connection]
ssh_args = -F sshconfig 

まとめ

Ansibleを使った自動化をどんどん進めていくといろんな場面に遭遇します。 その1つとしてAnsibleを実行する端末からネットワーク的に直接届かないサーバへのプロビジョニングです。

今回は、いわゆる多段SSHを使った踏み台サーバ越しでのAnsibleの実行方法について解説しました。
Ansibleの設定自体も重要ですが、その機能が実現している方法がわかると、仕組みの理解やデバッグの手助けになるでしょう。

記事の内容に関連した相談、仕事依頼したい New

記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる

フィードバック

本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる

このエントリーをはてなブックマークに追加