web-dev-qa-db-ja.com

ansibleを使用したgit展開のためのSSHローカルキーの使用を自動化する

私は浮浪者とansibleを使っています。 ansibleのdeploymentロールを自動化したい( ここでレポを確認できます )。この目的のために、ローカルのsshキーをVPSとVagrantゲストマシンにデプロイしようとしています(SSHエージェント転送を試みています)。

[〜#〜] goal [〜#〜]

Ansibleを使用してgitで展開プロセスを自動化します。私はすでにこれをしました:

---

- name: read-write git checkout from github
  git: repo={{ repository }} dest=/home/site

どこ:

---
# Variables here are applicable to all Host groups

repository: [email protected]:dgnest/dgnest.git

[〜#〜]問題[〜#〜]

「迷惑なプロビジョニング」を行うと、コンソールはここで停止します。

TASK: [deployment | read-write git checkout from github] ********************** 

これは、sshキーを設定していないためです。

トライしました

Ansibleのgitモジュールにあるkey_fileオプションを使用したいと思います。しかし、それも失敗します。

---                                                                             

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=/home/oscar/.ssh/id_rsa.pub

別のオプションは、私の〜/ ssh/id_rsa.pubを各VPSとvagrantにコピーすることですが、この場合の私の問題は、すべての異なるユーザー。 Vagrantは「Vagrant」ユーザーを使用し、VPSは別のVPSを使用するため、これらの各ユーザーにsshローカルキーを挿入する必要がありましたか?

あなたが私を助けることができることを願っています。ありがとうございました。

UPDATE:

@leucosの回答を自動化しました(ありがとう)。秘密鍵と公開鍵をコピーします。私はこのリンクと実装を共有しています。

30
oskargicast

key_fileの方法を選択した場合、キーはVPS/vagrantマシン上にある必要があると思います。そのため、最初にコピーすることをお勧めします。ここでは、公開鍵ではなく秘密鍵が必要です。

2番目のオプションでは、インスタンスタイプに応じて特定のユーザーにキーをプッシュできます。 VPSのユーザーがvpsuserであり、主にこれらのVPSにデプロイする場合、次のようにできます。

group_vars/all:

deploy_user=vpsuser

group_vars/vagrant

deploy_user=vagrant

次に、次のようなプレイブックを作成できます。

- name: send key to remote deploy user
  copy: src=files/private_key dest=~/{{deploy_user}}/.ssh/priv_key

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=~/{{deploy_user}}/.ssh/priv_key

ただし、リモートプライベートキーのパスワードがどのように求められるかわかりません(デフォルトでは認証エージェントの転送が許可されているとは思わない(-vvvv出力を確認)、~/.ansible.cfg)。

デプロイメントの目的で特定のキーを使用することをお勧めします(gitリポジトリで読み取り専用のパーマを使用)。このようにして、秘密鍵がマシンから離れることはありません。この特別なキーをパスワードなしにします。セキュリティのトレードオフは許容できると思います-コードを保護するだけです-秘密鍵があるマシンでコードがチェックアウトされているため、ゲームはすでに終了しています。

別のオプションは、ansibleを使用してローカルチェックアウトからアプリケーションを配布することです。tarballを作成し、ファイルをコピーし、untarすると、設定が完了します。このように、VPSにセキュリティ認証情報を残す必要はありません。

幸運を。

31
leucos

do n'tローカルSSHキーをリモートサーバーにコピーする必要があります。代わりに、展開スクリプトを実行しているディレクトリにansible.cfgという名前のファイルを作成し、次の設定を配置します。

[ssh_connection]
ssh_args = -o ForwardAgent=yes

これで、ローカルIDがAnsibleで管理するリモートサーバーに転送されます。

33