私は浮浪者と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の回答を自動化しました(ありがとう)。秘密鍵と公開鍵をコピーします。私はこのリンクと実装を共有しています。
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にセキュリティ認証情報を残す必要はありません。
幸運を。
do n'tローカルSSHキーをリモートサーバーにコピーする必要があります。代わりに、展開スクリプトを実行しているディレクトリにansible.cfg
という名前のファイルを作成し、次の設定を配置します。
[ssh_connection]
ssh_args = -o ForwardAgent=yes
これで、ローカルIDがAnsibleで管理するリモートサーバーに転送されます。