AnsibleでBitbucketからcloneしてデプロイ(リモートがホストの秘密鍵を使ってBitbucketにアクセス)

AnsibleでBitbucketからcloneしてデプロイしようとしたのですが、幾つかハマるポイントがありました。結果としては、Bitbucketに公開鍵を登録しておき、リモートがホストの秘密鍵を使ってBitbucketにアクセスする、という形に落ち着きました。結構時間を消費してしまった。。。以下、手順です。

1)Bitbucketに公開鍵を登録する

2)ansible.cfg に以下を追記する

[ssh_connection]
ssh_args = -o ForwardAgent=yes

3)Ansibleのgitモジュールでaccept_hostkey=trueを指定する

– name: clone repo
git: repo=git@bitbucket.org:user/repo.git dest=”/home/user/dest” accept_hostkey=true

http://docs.ansible.com/ansible/git_module.html

上記を設定してもPermission denied (publickey,gssapi-keyex,gssapi-with-mic).エラーが出る場合、ホストからBitbucketへの接続自体に問題がある可能性があります。というか、俺がそうでした。Ansibleの設定周りが何か悪さをしているのではないかと思い延々と調べていたら、完全に見当外れ。SourceTreeからは何も問題なく使えているので、ホスト側のssh設定に問題があることに考えが至りませんでした。

ホストからBitbucketに問題なく接続できるかどうかは、以下のコマンドでチェックできます。

$ ssh git@bitbucket.org

もしここでもPermission deniedが出たら、ホスト側の接続の問題です。接続が成功すると、以下のような表示になります。接続自体は成功したけど、コマンドは無効なためすぐコネクションが閉じられています。

PTY allocation request failed on channel 0
logged in as user.

You can use git or hg to connect to Bitbucket. Shell access is disabled.
Connection to bitbucket.org closed.

俺の場合、Bitbucketの公開鍵や~/.ssh/config周りに問題はなかったのですが、接続時にパスワードを要求されたので、パスワードを入力しないと接続できませんでした。一度パスワードを入力してからもう一度 ssh git@bitbucket.org したら接続成功し、そのままansible-playbookしたらcloneにも成功しました。