こんにちは。インフラの深淵を覗き込み、自動化の美学を追求するSREエンジニアです。
今日は、Ansibleを使いこなす上で避けては通れない「閉域網の壁」を突き破る技術の話をしましょう。現場でよくある「直接アクセスできないサーバーをどうやって管理するか?」という悩み。これを解決するSSHの魔法を伝授します。
これをマスターすれば、あなたのインフラ管理能力は一段上のステージへ到達します。
—
1. なぜ「踏み台(Jumphost)」が必要なのか?
実務の現場では、セキュリティ向上のためにターゲットノード(管理対象)をインターネットから遮断し、踏み台サーバーを経由しないとSSHできない構成が一般的です。
Ansibleはデフォルトで、「制御ノード(あなたのPCやCI/CDサーバー)からターゲットへ直接SSHできる」ことを期待します。しかし、多段プロキシ環境では、この前提が崩れます。ここで登場するのが `ProxyCommand` です。
2. 魔法の鍵:SSHの設定を極める
Ansibleは裏側でSSHを使用しているため、Ansibleのコードをいじる前に、まずは `.ssh/config` を整備するのが「プロの流儀」です。
あなたのローカル(または制御ノード)の `~/.ssh/config` を以下のように設定してください。
踏み台サーバーの設定
Host jump-server
HostName 10.0.0.1
User admin_user
IdentityFile ~/.ssh/id_rsa_jump
ターゲットノードの設定(ここが肝!)
Host target-node
HostName 192.168.1.50
User app_user
IdentityFile ~/.ssh/id_rsa_target
# 踏み台経由で接続する魔法のコマンド
ProxyCommand ssh -W %h:%p jump-server
- ポイント: `-W %h:%p` は「標準入出力を指定したホストのポートへ転送する」という意味です。これが「踏み台越しに直接繋がっているかのように」通信をトンネルしてくれます。
3. Ansible Inventory:設定を「コード」として定義する
SSH設定が完了すれば、AnsibleのInventoryは驚くほどシンプルになります。
`hosts.ini`
[web_servers]
SSH configで定義した名前をそのまま使う
target-node ansible_user=app_user
これで、`ansible -i hosts.ini web_servers -m ping` を叩けば、踏み台を経由してターゲットノードへ到達するはずです。
4. プロキシ環境下での「環境変数」問題
接続経路だけでなく、ターゲットノードがインターネットに出られない環境では、`yum` や `apt` のために `http_proxy` が必要になります。Ansible側からこれを注入するには、`group_vars` を活用します。
`group_vars/all.yml`
ansible_ssh_common_args: ‘-o ProxyCommand=”ssh -W %h:%p jump-server”‘
ターゲット上のOSがプロキシを参照できるようにする
environment:
http_proxy: “http://proxy.internal:8080”
https_proxy: “http://proxy.internal:8080”
5. 現場で震えるほど役立つ「トラブルシューティング」
うまく繋がらない時、初心者はパニックになりますが、プロは冷静にレイヤーを切り分けます。
1. 接続タイムアウト(Connection Timeout):
- 踏み台自体のファイアウォール設定を確認。
- `ansible.cfg` に `timeout = 30` を追加し、余裕を持たせる。
2. 鍵認証のループ:
- `-v` (verbose) オプションをつけて実行してください。`ansible -i hosts.ini web_servers -m ping -v` 。これでどのステップでSSHが拒否されているか一目瞭然です。
3. SSH Agentの活用:
- 毎回パスフレーズを求められる場合は `ssh-add` で鍵を登録しましょう。AnsibleはログインユーザーのAgentを自動で引き継ぎます。
最後に:自動化の真髄
「踏み台越しの管理」をマスターすると、社内のあらゆる閉域網に対して、あなたは「どこからでも手が届く」状態になります。
最初は複雑に見えるかもしれませんが、「SSHのトンネリング設定を適切に行い、Ansibleはそれに乗っかるだけ」という役割分担を理解すれば、どんなに複雑なマルチホップ環境も怖くありません。
まずは手元の `~/.ssh/config` から整理してみませんか?その小さな一歩が、あなたのインフラ自動化の旅を、劇的に楽で面白いものに変えてくれるはずです。
何か詰まったら、いつでも戻ってきてください。現場で培った知見をまた共有しましょう。応援しています!