My Node.JS项目包含对github上托管的私有NPM repos的引用。这在本地工作正常,但我很难在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实例没有所需的SSH密钥来访问我的私有github存储库。如果我使用带有username:password@github.com
内联的HTTPS样式git URL,它可以正常工作。它也可以使用github提供的oauth token method(基本上是用户:pass)。但我不希望任何凭据被签入源代码控制,所以我试图从我的EB实例上通过SSH从github克隆工作。
我已经尝试了一百万种方法,包括根据this blog post的npm preinstall
脚本,这些方法过去一直工作到npm2,其中更改使预安装在构建树之后运行,并且PR要修复该问题仍未解决。
我尝试了一个.ebextensions
命令配置,试图调用git config
将insteadof
放在git@github.com上的HTTPS URL中,OAUTH令牌来自环境变量(本身很棘手,因为在启动周期中此时未设置env变量,并且缺少$ HOME会使git配置混乱)。
我还尝试了使用.ebextensions
在我的EB实例上设置SSH的各种不同方式,包括this solution from the comments on the mentioned blog post。这基本上就是我现在被困住的地方。
.ebextensions
files
配置,根据this example /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未在任何地方设置。
如何获取git来获取我的SSH配置,从而使用我的SSH密钥?我怎样才能找到git查找SSH配置文件的位置?通常它在〜/ .ssh,但由于$ HOME没有设置好,所以......这应该很容易但是让我疯了。
答案 0 :(得分:11)
经过一整天的挣扎并最终绊倒this answer到我之前错过的一个非常相似的问题,事实证明放置ssh键的正确位置是为了被EB上的git拾取而在{ {1}},不 /root/.ssh
,不 /tmp/.ssh
。
我的最终配置(假设在/home/ec2-user/.ssh
的S3存储桶中有一个私有SSH密钥,并且使用配置了AMI的github用户向访问存储库的用户注册了相应的公钥作为<my-bucket>/github-eb-key
,以及64bit Amazon Linux 2016.09 v3.3.0 running Node.js
中的以下内容:
.ebextensions/01_ssh_setup.config