【入門編】AnsibleでSSH鍵の多重ホップとJump Host設定を極める:ProxyJumpとProxyCommandの高度な使い分け – インフラ構成管理(IaC)活用バイブル

こんにちは。インフラの世界へようこそ。

現場で「Ansibleで構成管理をしよう」と息巻いたとき、最初にぶつかる壁が「ネットワークの境界線」です。踏み台サーバー(Jump Host)が1つならまだしも、セキュリティ要件が厳しい環境では、多段の踏み台を経由しなければターゲットに辿り着けないことも珍しくありません。

今日は、その複雑怪奇なネットワークを、Ansibleを使って「まるで隣のサーバーを操作するように」扱うための極意を伝授します。

—

1. なぜ「SSHの多重ホップ」で躓くのか?

AnsibleはデフォルトでSSHを使用してターゲットと通信します。しかし、踏み台サーバーを介する場合、単なる `ssh` コマンドではなく、「どうやってトンネルを掘り、その中を通るか」をAnsibleに教える必要があります。

これを適当に設定すると、ファイル転送が異常に遅くなったり、接続がタイムアウトしてイライラすることになります。そうならないための「プロの作法」を学びましょう。

—

2. 必須の基礎:`ProxyJump` vs `ProxyCommand`

SSHの設定には大きく分けて2つの流儀があります。

  • ProxyJump (`-J`): OpenSSH 7.3以降で導入された現代的な方法。シンプルで直感的です。
  • ProxyCommand: 古い環境や、踏み台上で複雑なスクリプトを走らせたい場合に使う、より低レイヤーな制御方法。

結論:特別な理由がない限り `ProxyJump` を使ってください。

Ansibleでの設定方法(`ansible.cfg` または `inventory`)

インベントリファイルに記述するのが最も管理しやすいです。

inventory.ini
[targets]
ターゲットホストの定義
web-server-01 ansible_host=10.0.1.5

[targets:vars]
bastion-host経由で接続するための魔法の呪文
ansible_ssh_common_args=’-o ProxyJump=user@bastion-host’

これだけで、Ansibleは「まずbastion-hostにSSHし、そこからターゲットへジャンプする」という動きを自動化してくれます。

—

3. 【深淵】多段踏み台環境(Multi-hop)の攻略法

セキュリティが強固な現場では、`bastion-1` → `bastion-2` → `target` と3段ジャンプが必要なこともあります。この場合、`ProxyJump` をカンマ区切りでつなぐのが最強の解決策です。

多段ホップの記述例
ansible_ssh_common_args=’-o ProxyJump=user@bastion-1,user@bastion-2′

これだけで、Ansibleの裏側でSSHが多段トンネルを自動構築してくれます。もう個別にSSH設定ファイル(`~/.ssh/config`)をこねくり回す必要はありません。

—

4. 現場で震えるほど役立つ「パフォーマンス高速化」の裏技

多段ホップ環境でAnsibleを動かすと、ファイル転送(`copy`モジュールなど)が遅いと感じることがあります。これは、SSH接続を毎回再利用しているからです。

以下の設定を `ansible.cfg` に追加してください。これができると「デキるエンジニア」の仲間入りです。

[ssh_connection]
SSH接続を使い回す設定(ControlMaster)
これにより、多段接続でも2回目以降の通信が劇的に速くなります
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
pipelining = True

  • ControlMaster/ControlPersist: 1度開いたコネクションを維持します。多段ホップでのハンドシェイクのオーバーヘッドを劇的に削減します。
  • pipelining: これを `True` にすると、Ansibleのモジュール実行時にスクリプトを一時ファイルに書き出さず、SSHのパイプ経由で直接実行します。転送量とI/Oを減らす、現場必須の最適化設定です。

—

5. HelloWorld的動作確認

まずは、設定が正しく効いているか確認しましょう。いきなりplaybookを流すのではなく、疎通確認から入るのが鉄則です。

-v をつけて詳細なSSHのログを見るのがコツです
ansible targets -i inventory.ini -m ping -v

もしここでエラーが出るなら、まずは `ssh -J user@bastion-1,user@bastion-2 user@target` をターミナルで直打ちし、SSH鍵が正しく渡っているか確認してください。Ansibleは、その「手元のSSH」の延長線上にしかありません。

—

最後に:先輩からのアドバイス

「踏み台経由の自動化」は、一見複雑に見えますが、一度この仕組みをマスターすれば、どんなにネットワークが分断された堅牢な環境でも、あなたは自由自在にインフラを操作できるようになります。

まずは1段の `ProxyJump` から始めてみてください。それが成功すれば、多段ホップも「ただのカンマ区切り」に過ぎないことに気づくはずです。

インフラ自動化の旅はまだ始まったばかりです。一緒に、ストレスフリーな運用環境を作っていきましょう!応援しています。

タイトルとURLをコピーしました