我的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
以将insteadof
git@github.com上的HTTPS
URL放入具有来自环境变量的OAUTH令牌(本身很棘手,因为启动时此时未设置环境变量)循环,缺少$ HOME会使git config混淆)。
我还尝试了各种不同的方法来.ebextensions
在我的EB实例上设置SSH,包括从提到的博客文章的评论中得到的解决方案。基本上这就是我现在停留的地方。
.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命令行脚本。都不