当前位置: 首页 > 面试题库 >

为Elastic Beanstalk上的github私有存储库访问设置SSH密钥

燕富
2023-03-14
问题内容

我的Node.JS项目包含对托管在github上的私有NPM存储库的引用。在本地可以正常工作,但是我正在努力使其在Elastic
Beanstalk上正常工作。

dependencies: {
  ...
  "express": "^4.12.4",
  "jsonwebtoken": "^5.0.5",
  "my-private-module": "git@github.com:<my-user>/<my-repo>.git#<my-version>",
  ...
}

--

我需要的是能够在我的Elastic Beanstalk实例上为git设置有效的SSH配置,而不必在源代码控制中存储秘密密钥等。

显然,EB实例没有访问我的私人github仓库所需的SSH密钥。如果我将HTTPS样式的git
URL与username:password@github.com内联一起使用,则效果很好。它也可以使用github提供的oauth令牌方法工作(本质上是user:pass)。但是我不希望将任何凭据签入到源代码控制中,因此我试图从github进行克隆以在我的EB实例上通过SSH进行工作。

我已经尝试了上百万种方法,包括npm preinstall根据此博客文章提供的脚本,该脚本以前一直工作到npm2为止,在npm2上进行了更改,预安装在树生成后运行,而解决该问题的PR仍在进行中。

我尝试了一个.ebextensions命令配置,该配置尝试调用git config以将insteadofgit@github.com上的HTTPS
URL放入具有来自环境变量的OAUTH令牌(本身很棘手,因为启动时此时未设置环境变量)循环,缺少$ HOME会使git config混淆)。

我还尝试了各种不同的方法来.ebextensions在我的EB实例上设置SSH,包括从提到的博客文章的评论中得到的解决方案。基本上这就是我现在停留的地方。

  • 我已经成功创建了一个密钥对,并在我的github配置文件上进行了设置,并验证了本地客户端可以使用私钥来克隆我的仓库
  • 我已将我的私钥和ssh配置文件放在私有S3存储桶中
  • 根据此示例,我创建了一个.ebextensions files配置,将这两个文件从S3存储桶复制到/tmp/.ssh/
  • 我创建了一个调试commands .ebextensions配置,其中列出了/tmp/.ssh并显示文件已成功从S3下载:

/tmp/.ssh/config包含:

Host github.com
    IdentityFile /tmp/.ssh/deploy_key
    IdentitiesOnly yes
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking no

/tmp/.ssh/deploy_key包含我的私钥,该私钥经过验证可在本地使用。

但是,git仍然抛出错误:

npm ERR! Command failed: git clone --template=/tmp/.npm/_git-remotes/_templates --mirror ssh://git@github.com/[.....]
npm ERR! Cloning into bare repository '/tmp/.npm/_git-remotes/git-ssh-git-github-com-[...]
npm ERR! Host key verification failed.
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

我现在想法不多了。我最好的猜测是/tmp/.ssh不是git用来查找ssh配置文件的路径-
可能是在提出链接解决方案时提出的,但可能在以后的AMI:s等中已更改。使用的环境EB启动时似乎有点局限;命令以用户身份运行,nodejs但/
tmp似乎用作主目录,即使未在$ HOME处设置$ HOME。

如何获取git来获取我的SSH配置并因此使用我的SSH密钥?如何找到git在哪里寻找SSH配置文件?通常它位于〜/ .ssh中,但是由于未设置$
HOME,所以……这应该很容易,但会让我发疯。


问题答案:

事实证明,放置ssh键以便被git在EB上拾取的正确位置是/root/.ssh不是 /tmp/.ssh不是 /home/ec2-user/.ssh

我的最终配置(假设在的S3存储桶中有一个私有SSH密钥<my-bucket>/github-eb- key,并且使用访问权限访问该仓库的github用户注册了相应的公共密钥),使用配置为的AMI 64bit Amazon Linux 2016.09 v3.3.0 running Node.js,并且在AMI中配置了以下内容.ebextensions/01_ssh_setup.config

Resources: 
  AWSEBAutoScalingGroup: 
    Metadata: 
      ? "AWS::CloudFormation::Authentication"
      : 
        S3Auth: 
          buckets: 
            - <my-bucket>
          roleName: 
            ? "Fn::GetOptionSetting"
            : 
              DefaultValue: aws-elasticbeanstalk-ec2-role
              Namespace: "aws:asg:launchconfiguration"
              OptionName: IamInstanceProfile
          type: s3
files: 
  /root/.ssh/github-eb-key: 
    authentication: S3Auth
    mode: "000600"
    owner: root
    group: root
    source: "https://s3-eu-west-1.amazonaws.com/<my-bucket>/github-eb-key"
  /root/.ssh/config: 
    mode: "000600"
    owner: root
    group: root
    content: |
      Host github.com
        IdentityFile /root/.ssh/github-eb-key
        IdentitiesOnly yes
        UserKnownHostsFile=/dev/null
        StrictHostKeyChecking no


 类似资料:
  • 问题内容: 我无法让Jenkins通过SSH在BitBucket上克隆git存储库。出现以下消息失败: 采取的步骤 创建一个SSH密钥对 将公共密钥添加为BitBucket上存储库的部署密钥 在Jenkins Credentials Manager插件中安装SSH密钥和用户名(尝试过’git’和我的BB帐户名) 尝试使用URL的形式在构建中克隆存储库 我也尝试过不使用凭据管理器并手动将密钥安装在中

  • 问题内容: 我需要为一些内部公司库建立一个Maven存储库,这些库仅需要我们的开发人员访问(即安全),但应该可以通过Internet安全访问。 我熟悉公共Maven仓库的设置,但是不确定建立私有远程仓库的最佳方法。 我怎样才能做到这一点? 问题答案: 自发布此问题以来,我发现了JitPack,这使得从Github直接创建公共(免费)和私有(便宜)存储库变得异常容易。

  • 问题内容: 我正在尝试使用Apache2设置Debian服务器作为运行Jenkins的Tomcat 7的前端-这正在工作- 但我希望Jenkins监视托管在bitbucket上的私有Mercurial存储库,并且我想使用SSH。(我曾尝试使用简单的https,但仍然没有喜悦- SO上有一个问题答案,建议使用ssh) 通过将Jenkins .WAR文件拖放到/ webapps中,我已经使用Tomca

  • 问题内容: 我希望Jenkins从托管在Github上的私有存储库自动获取数据。但是我不知道如何完成该任务。尝试了文档,为jenkins用户生成了ssh- key,我所看到的就是:“无法克隆存储库”。我已经检查过网址-它们是有效的。 任何线索,也许您知道一些描述此类内容的文档/博客/内容? 问题答案: 也许GitHub 对您正在寻找的部署密钥提供支持?引用该页面: 什么时候应该使用部署密钥? 很简

  • 我没有找到任何关于在前端端实现逻辑来管理Azure密钥库的可能性的信息。同时,我创建了一个Node JS服务器项目使用ENV来管理Azure Key Vault,它工作成功,但我想在我的Angular应用程序中得到同样的效果。

  • 问题内容: 我似乎无法让我的Jenkins CI与Github合作。 我的clone命令失败,但这是由于密钥造成的,所以我以服务帐户身份登录(用户Jenkins以Windows Service身份运行)并运行了clone命令。一切都好在引擎盖上。 但是,当我想运行获取以获取最新信息时,它将无法完成。它只是坐在那里。我已经尝试过通过Jenkins的Git插件,也尝试通过Windows命令行脚本。都不