我的 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实例上设置一个可工作的SSH配置,以便于可以从github上克隆代码库,而无需将密钥等信息存储在源代码管理中。显然,EB实例没有所需的SSH密钥来访问我的私有github repos。如果我使用带有内联username:password @ github.com
的HTTPS风格的git URL,则可以正常工作。使用GitHub提供的OAuth令牌方法也可以正常工作(本质上是user:pass),但我不想将任何凭据检入到源代码管理中,因此我正在尝试通过SSH在我的EB实例上从github进行克隆操作。 我已经尝试了各种方式,包括根据这篇博客文章进行的npm preinstall脚本,该脚本曾经在npm2中起作用,在该版本中更改后,preinstall在构建树后运行,并且修复该问题的PR仍在等待审核。我还尝试了各种不同的方法,包括使用.ebextensions
在我的EB实例上设置SSH,包括来自上述博客文章评论中的此解决方案。 这基本上是我现在所卡住的地方.
.ebextensions
files
配置,该配置将这两个文件从我的S3存储桶复制到/tmp/.ssh/
中,根据此示例。 我已经创建了一个调试commands
.ebextensions
配置,它列出了/tmp/.ssh并显示文件已成功从S3下载: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中可能已经改变。 EB启动时使用的环境似乎有点受限制; 命令作为用户nodejs
运行,但即使$HOME没有设置,/tmp似乎仍然被用作主目录。
我该如何让git获取我的SSH配置文件,并因此使用我的SSH密钥?我该如何找出git查找SSH配置文件的位置?通常它在~ /.ssh中,但由于未设置$HOME,所以…这应该很容易,但让我感到抓狂。