建立与AWS弹性青苗和Ruby容器私人Github的访问(Setting up private Gi

2019-07-04 00:36发布

由去最近的教程上使用Git的Ruby部署建立AWS弹性魔豆,我只是从我的CI服务器设置一个弹性魔豆环境。 但是,应用程序未能启动。 我通过日志去发现, bundle install ,并显示错误消息是失败。

取git@github.com:例如/私有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 /应用/ ondeck失败。[0米

Gemfile我的Rails应用程序包含引用到gemified托管在一对夫妇在Github上我拥有的私有仓库的插件。 就像是

宝石 'somegemname',:GIT中=> 'git@github.com:例如/私人repository.git'

我已经通过设立面临Capistrano的部署类似的问题,这是解决ssh_options[:forward_agent] = true

AWS弹性豆茎红宝石容器支持通过定制自定义配置.config文件下放置.ebextensions 。 将建立在这种情况下的SSH转发代理的帮助? 还有没有其他的替代方案达成私人Github上库,同时启动的弹性魔豆环境?

更新1:我刚刚检查与一个用户bundle install开始。 发现了一个脚本/opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh开始bundle installroot用户。 我试图创建下一个SSH密钥/root/.ssh并增加它的酒馆关键Github上部署密钥,用于存储库。 至今没有运气。 现在将尝试一个SSH酒馆键添加到Github上我的用户帐户,以便它适用于通过我的Github上的帐户访问的所有私有仓库。

Answer 1:

努力好日子后,我终于通过只使用一个能使用我公司专用GitHub的回购与弹性魔豆.config文件。 我使用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
    "/root/.ssh/known_hosts":
        owner: root
        group: root
        mode: "000644"
        content: |
            #
            # paste output of `ssh-keyscan -H github.com` here
            #

commands:
    01-command:
        command: sudo aws s3 cp s3://bucket-with-your-github-ssh-key/github /root/.ssh
    02-command:
        command: sudo chmod 600 /root/.ssh/github

粗糙说明:

  • 由您的EB实例访问的S3桶。 里面那个桶,存储SSH密钥允许访问要通过访问GitHub的仓库pipnpmbundle等使用sudo aws s3 cp到密钥复制到您的EB实例上部署。 sudo因为EB脚本中使用是必要的root ,而不是ec2-user

  • 这ebextensions配置文件也创造了你的EB实例2个文件。 /root/.ssh/config告诉ssh (通过调用pipgit )使用你从S3复制的关键。 粘贴的输出ssh-keyscan -H github.com/root/.ssh/known_hosts将预先验证ssh你的EB实例实际上是与GitHub的沟通,以避免MITM攻击。 这比禁止更StrictHostKeyChecking/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 ,以确保一切顺利。



Answer 2:

下面是我终于做到了。 这一切都建立了负责用户的SSH密钥bundle install阶段。

  1. 在AWS弹性魔豆的应用程序启动的环境
  2. 可选 -登录亚马逊EC2控制台,并更改实例类型为期望值
  3. 更新SSH密钥对的名称,以使远程SSH登录。 (我敢肯定,必须有指定实例类型和SSH密钥对名称的方式,同时启动环境)
  4. 寻找无论是在EC2控制台或通过CLI最新推出的情况下,请注意此实例的完全限定域名(FQDN)。 EB情况下,就像你将与亚马逊EC2创建任何其他实例。 通过SSH这种情况下登录。
  5. 执行以下命令以创建SSH密钥root用户

    $ sudo的苏 - 根

    $的ssh - 凯基-t RSA -C “some-email@yourdomain.com”

  6. 编辑.bash_profile显式启动ssh-agent并添加新生成的SSH密钥。 添加以下行(这似乎是不必要的,我做到了,只是要确定)

    EVAL`的ssh-agent

    EVAL ssh-add ~/.ssh/id_rsa

  7. 注意SSH公钥如: ~/.ssh/id_rsa.pub并将其添加到了Github上的帐户设置SSH密钥有权访问私有仓库

  8. 此时,您的实例访问您的私人Github的库。 你可以通过发出测试这个git clone由作为登录这些版本库root用户。

  9. 创建AMI出使用标准方法将此实例

  10. 回到你的AWS弹性魔豆仪表盘和寻找Edit Configuration在应用程序的环境选项。 在Server选项卡中,寻找一个选项,它可以让你指定一个Custom AMI 。 更新此字段与新创建的AMI ID例如: ami-4324fd4

  11. 通过点击保存设置Apply Changes 。 AWS弹性魔豆将开始在你的环境中部署新实例和终止旧的。 这是为了确保所有的自动缩放实例有私人Github上访问所需的白名单中的SSH密钥。

上述步骤完成后,你可以继续和部署Rails应用程序git aws.push

希望这可以帮助其他人谁卡住了。 我很高兴地看到不止这一个,虽然一个更优美的解决方案。



Answer 3:

如果你是在赶时间,你的应用程序回购也是私有的,你可以创建一个额外的Github上的用户帐户,并为其分配只读权限到含有宝石的回购。

然后给捆绑使用新的帐户凭据的HTTPS URL:

gem 'somegemname', git: "https://username:password@github.com/example/privaterepository"


Answer 4:

有两种方法可以与GitHub的认证。 我建议你个人的GitHub帐户在两种情况下,私人GitHub库相关联。

第一种方法通过使用本地从远程GitHub库推,拉,所以在相同的SSH凭证 - 你上传你的公钥对您的个人帐户,而这正是GitHub上使用。 到另一台服务器上运行时,做这项工作,你需要有ssh-agent运行和使用ssh-add到您的钥匙添加到代理-那么你的个人GitHub的凭据可用于执行Git命令。

第二种方法是让你部署到能够访问GitHub上的远程服务器(S) - 这可能是弹性的豆茎或实际的服务器(一个或多个)。 在服务器上创建一个密码的SSH密钥( ssh-keygen -t rsa ,接受默认设置,或者EB都有自己的一种方式),然后复制生成的公钥内容,并创建一个新的“部署的关键”包含在你的GitHub是关键回购 - 你需要admin,我以为你是。 已安装部署键将允许EB用户登录到远程服务器,并做git pull和相关命令(只读)从服务器。

我认为第一种方法是更优雅,更易于管理要部署到服务器的数量增长,但哪种方法,你可以使用依赖于EB的选项。



Answer 5:

从requirements.txt文件中删除私人github上回购和创建脚本中使用环境变量的用户名和密码进行安装。

文件: 项目根/ install-extra-requirements.sh

#!/bin/sh

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

文件: 项目根/ .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()

文件:项目根/ .ebextensions / 002_container.config

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

现在,你可以设置GITHUB_USERNAME和GITHUB_PASSWORD在你的弹性魔豆环境环境变量。



文章来源: Setting up private Github access with AWS Elastic Beanstalk and Ruby container