Ansible で become を指定するときに ssh-agent を委譲する方法

プライベートサブネットの中に配置したビルドサーバで Ansible を実行するとします。踏み台サーバを経由してビルドサーバにたどり着くために ssh-agent をフォワードするのも一つの手でしょう。こうすると、SSH プライベートキーをビルドサーバに配布する必要がなくなります。

Ansible には become オプションがあり、特定のユーザでモジュールを実行できます。多くの場合は root としてモジュールを実行することでしょう。become を指定すると Ansible の内部では sudo でコマンドを発行することになります。たとえば synchronize モジュール は内部的に rsync を発行するので、SSH がうまく設定されていない場合はデータの同期に失敗します。

私が遭遇したエラーは次のようなものです。

rsync error: error in rsync protocol data stream (code 12) at io.c(600)

rsync でデータを同期する対象のマシンが ssh-agent を使うことでアクセスできる場合、sudoers の設定を書き換えることで sudo 後でも ssh-agent の設定を引き継げます。具体的には sudo visudo を実行し、次の行を追加します。

Defaults    env_keep+=SSH_AUTH_SOCK

この作業を終えた後であれば、become を指定して Ansible モジュールを実行しても ssh-agent の情報を引き継げます。

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中