踏み台サーバー経由でAnsibleを実行する方法について、少し詰まったので備忘録
結論
踏み台サーバーを使った多段SSHの設定として以下のパラメータを設定することで可能となります
| |
サンプル: arakkkkk/example-ansible-proxyjump
構成
以下の構成で、対象サーバーへ踏み台サーバー経由でAnsibleを実行します。

<!-- A[ローカルマシン<br/>Ansible実行サーバー] -->|SSH:2222<br>公開鍵認証| B[踏み台サーバー<br/>192.168.11.10] -->
<!-- B -->|SSH:2222<br>公開鍵認証/パスワード認証| C[対象サーバー<br/>192.168.122.70] -->
前提条件
- 踏み台サーバーと対象サーバーの両方でSSH公開鍵認証が設定済み
- 両サーバーともSSHポート2222で接続
hosts設定 (踏み台サーバー/対象サーバー共に公開鍵認証)
hostsファイルに以下の設定を記述
| |
ansible-client.ymlのようにhost_varsのymlに記載すると管理しやすいかと思います
ansible_host: 対象サーバーのIPアドレスansible_user: 対象サーバーのSSH接続ユーザーansible_ssh_private_key_file: 秘密鍵ファイルのパスansible_port: 対象サーバーのSSHポートansible_ssh_common_args: SSH接続時の追加オプション (踏み台へのSSH接続情報)ProxyCommand: 踏み台サーバー経由での接続コマンド-W %h:%p: ポートフォワーディング設定
hosts設定 (踏み台サーバーは公開鍵認証、対象サーバーはパスワード認証)
踏み台サーバーには証明書認証、対象サーバーにはパスワード認証という場合でもAnsibleによる実行は可能です。
ansible_ssh_private_key_fileパラメータを削除し、実行時に--ask-passをつけて実行時にパスワードを入力して実行が可能です。
| |
Ansible Vault等でパスワードを保存している場合、ansible_ssh_passパラメータとして用意しておくことも可能です
| |
※ただし、上記方式での実行にはsshpassのインストールが必要です