29

Gitを使用したRubyデプロイメント用のAWSElasticBeanstalkのセットアップに関する最近のチュートリアルに従って、CIサーバーからElasticBeanstalk環境をセットアップしました。ただし、アプリケーションを起動できませんでした。ログを調べてbundle install、エラーメッセージが表示されて失敗していることを確認しました。

git@github.com:example/private-repository.gitの取得ホストキーの検証に失敗しました。致命的:リモートエンドが予期せずハングアップしました[31mGitエラー:git clone 'git@github.com:example/private-repository.git' "/var/app/ondeck/vendor/cache/ruby/1.9.1/cache/bundler/git/private-repository-e4bbe6c2b13bb62664e39e345c1b01d80017934c" --bare --no-hardlinksディレクトリ/ var / app/ondeckのコマンドが失敗しました。[0m

Gemfile私のRailsアプリケーションには、Github上のいくつかの所有するプライベートリポジトリでホストされているgemifiedプラグインへの参照が含まれています。何かのようなもの

gem'somegemname'、:git =>'git@github.com:example / private-repository.git'

Capistranoの展開で同様の問題に直面しましたが、を設定することで解決しましたssh_options[:forward_agent] = true

.configAWS Elastic Beanstalk Rubyコンテナは、の下に配置されたカスタムファイルを介したカスタム構成をサポートします.ebextensions。この場合、SSH転送エージェントを設定すると役立ちますか?Elastic Beanstalk環境の起動中にプライベートGithubリポジトリに到達するための他の選択肢はありますか?

更新1:abundle installが開始されたユーザーを確認しました。スクリプト/opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.shがユーザーbundle installとして開始することがわかりました。root下にSSHキーを作成してみて、その/root/.sshpub-keyをそのリポジトリのGithubDeployキーに追加しました。今のところ運がない。次に、SSH pub-keyをGithubのユーザーアカウントに追加して、Githubアカウントからアクセスできるすべてのプライベートリポジトリに適用できるようにします。

4

5 に答える 5

44

.config良い一日を過ごした後、私はついにファイルを使用するだけで、ElasticBeanstalkで組織のプライベートGitHubリポジトリを使用できるようになりました。Pythonとを使用してpipいますが、EBの他のパッケージインストーラーでも機能するはずです。

rhetonikのssh-agent+ssh-addアプローチはまったく機能しなかったので、代わりにssh構成ファイルをセットアップすることにしました。

これが私の.ebextensions/3-pip-install-from-github.configファイルです:

files:
    "/root/.ssh/config":
        owner: root
        group: root
        mode: "000600"
        content: |
            Host github.com
                User git
                Hostname github.com
                IdentityFile /root/.ssh/github

commands:
    01-command:
        command: sudo ssh-keyscan -H github.com >> /root/.ssh/known_hosts
    02-command:
        command: sudo chmod 644 /root/.ssh/known_hosts
    03-command:
        command: sudo aws s3 cp s3://bucket-with-your-github-ssh-key/github /root/.ssh
    04-command:
        command: sudo chmod 600 /root/.ssh/github

大まかな手順:

  • EBインスタンスからアクセスできるS3バケットを設定しますpipそのバケット内npmに、、、などを介してアクセスするGitHubリポジトリへのアクセスを許可するSSHキーを保存します。デプロイ時にそのキーをEBインスタンスにコピーするためにbundle使用します。EBスクリプトはではなくを使用するため、必要です。sudo aws s3 cpsudorootec2-user

  • このebextensions構成ファイルは、EBインスタンスに2つのファイルも作成します。S3からコピーしたキーを使用するように(およびによって呼び出されて)/root/.ssh/config指示します。intoの出力を保存すると、MITM攻撃を回避するために、EBインスタンスが実際にGitHubと通信していることが事前に確認されます。これは、で無効にするよりも優れています。sshpipgitssh-keyscan -H github.com/root/.ssh/known_hostssshStrictHostKeyChecking/root/.ssh/config

これが私のrequirements.txtファイルですpip

Beaker==1.7.0
Flask==0.10.1
Jinja2==2.7.3
MarkupSafe==0.23
# [...]
git+ssh://git@github.com/myorganization/myprivaterepo.git@0.0.142

実行中は、すべてがスムーズに実行されることを確認eb-deployできます。tail -f /var/log/eb-activity.log

于 2015-08-11T15:31:16.347 に答える
10

これが私がついにやった方法です。bundle installフェーズを担当するユーザーのSSHキーを設定することがすべてです。

  1. AWSElasticBeanstalkでアプリケーションの環境を開始します
  2. オプション-AmazonEC2コンソールにログインし、インスタンスタイプを目的の値に変更します
  3. SSHキーペア名を更新して、リモートSSHログインを有効にします。(環境の起動時にインスタンスタイプとSSHキーペア名を指定する方法が必要だと確信しています)
  4. EC2コンソールまたはCLIを介して新しく起動されたインスタンスを探し、このインスタンスの完全修飾ドメイン名(FQDN)をメモします。EBインスタンスは、AmazonEC2で作成する他のインスタンスと同じです。SSH経由でこのインスタンスにログインします。
  5. root次のコマンドを実行して、ユーザー のSSHキーを作成します

    $sudosu-ルート

    $ ssh-keygen -t rsa -C "some-email@yourdomain.com"

  6. 編集して、新しく生成されたSSHキー.bash_profileを明示的に開始して追加します。ssh-agent次の行を追加します(これは不要に思えるかもしれませんが、念のために行いました)

    eval `ssh-agent

    evalssh-add ~/.ssh/id_rsa

  7. SSH公開鍵に注意してください。例:~/.ssh/id_rsa.pubプライベートリポジトリにアクセスできるGithubアカウントのSSH鍵のセットに追加します。

  8. この時点で、インスタンスはプライベートGithubリポジトリにアクセスできます。git cloneユーザーとしてログインしてこれらのリポジトリでを発行することで、これをテストできrootます。

  9. 標準の方法を使用して、このインスタンスからAMIを作成します

  10. Edit ConfigurationAWS Elastic Beanstalkダッシュボードに戻り、アプリケーションの環境でオプションを探します。タブで、Serverを指定できるオプションを探しますCustom AMI。このフィールドを新しく作成されたAMIIDで更新します。例:ami-4324fd4

  11. を押して構成を保存しますApply Changes。AWS Elastic Beanstalkは、環境全体に新しいインスタンスのデプロイを開始し、古いインスタンスを終了します。これは、すべての自動スケーリングされたインスタンスに、プライベートGithubアクセスに必要なホワイトリストに登録されたSSHキーがあることを確認するためです。

上記の手順が完了したら、Railsアプリケーションを次のようにデプロイできます。git aws.push

これが行き詰まっている他の人に役立つことを願っています。しかし、これよりも優雅な解決策を見てうれしいです。

于 2012-11-22T07:23:06.047 に答える
4

お急ぎの場合で、アプリケーションリポジトリも非公開の場合は、追加のGithubユーザーアカウントを作成して、gemを含むリポジトリに読み取り専用権限を割り当てることができます。

次に、バンドラーに新しいアカウントのクレデンシャルを含むhttpsURLを指定します。

gem 'somegemname', git: "https://username:password@github.com/example/privaterepository"
于 2013-06-11T14:42:11.110 に答える
0

GitHubで認証するには2つのアプローチがあります。いずれの場合も、個人のGitHubアカウントをプライベートのGitHubリポジトリに関連付けることをお勧めします。

最初のアプローチは、リモートのGitHubリポジトリからプッシュやプルなどにローカルで使用するのと同じsshクレデンシャルを渡します。つまり、個人アカウントの公開鍵をアップロードします。これがGitHubが使用するものです。別のサーバーで実行しているときにこれを機能させるには、実行して、キーをエージェントに追加するためにssh-agent使用ssh-addする必要があります。次に、個人のGitHubクレデンシャルを使用してgitコマンドを実行できます。

2番目のアプローチは、デプロイするリモートサーバーがGitHubにアクセスできるようにすることです。これは、エラスティックBeanstalkまたは実際のサーバーの場合があります。サーバー上にパスワードなしのsshキーを作成し(ssh-keygen -t rsaデフォルトを受け入れるか、EBに独自の方法がある可能性があります)、生成された公開キーの内容をコピーして、GitHubリポジトリにそのキーを含む新しい「デプロイキー」を作成します。管理者である必要があります。インストールされたデプロイキーにより、EBユーザーはリモートサーバーにログインし、サーバーからgit pull関連するコマンド(読み取り専用)を実行できます。

最初の方法は、展開するサーバーの数が増えるにつれて、よりエレガントで管理しやすくなると思いますが、どちらの方法を使用するかは、EBのオプションによって異なる場合があります。

于 2012-11-20T15:35:51.563 に答える
0

プライベートgithubリポジトリをrequirements.txtファイルから削除し、ユーザー名とパスワードの環境変数を使用してそれらをインストールするスクリプトを作成します。

ファイル:project-root / install-extra-requirements.sh

#!/bin/sh

source /opt/python/run/venv/bin/activate
python ".extra-requirements.py"

ファイル:project-root / .extra-requirements.py

import os

def main():
    github_username = os.environ['GITHUB_USERNAME']
    github_password = os.environ['GITHUB_PASSWORD']
    repository = "git+https://%s:%s@github.com/yourgithubrepo" % (github_username, github_password)
    os.system("pip install %s" % repository)

if __name__ == '__main__':
    main()

ファイル:project-root / .ebextensions / 002_container.config

container_commands:
  01_install_extra_requirements:
    command: './install-extra-requirements.sh'

これで、エラスティックBeanstalk環境の環境変数としてGITHUB_USERNAMEとGITHUB_PASSWORDを設定できます。

于 2018-07-26T15:55:19.880 に答える