首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Heroku上安装私有ssh部署密钥

在Heroku上安装私有ssh部署密钥
EN

Stack Overflow用户
提问于 2014-09-21 17:32:24
回答 2查看 3.3K关注 0票数 6

我正在创建一个node.js应用程序,该应用程序充当Github的web钩子,当更改被推送时,它将自动部署特定的私有回购。为了使web钩子应用程序尽可能高效,我希望在部署web钩子的Heroku实例时,克隆并将私有回购拉到一个临时目录中,这样,当web钩子触发时,我只需要'git拉‘就可以获得最新的更新并部署它们。在部署web钩子应用程序(使用package.json或Procfile)时,运行shell脚本非常容易,但在运行git命令之前,必须安装私有部署键。目前,私钥和公钥在我的web钩子回购(我知道,一旦我让它工作,我会做得更好),所以我尝试安装它添加到我的外壳脚本(这是建议的这里)。

代码语言:javascript
复制
mkdir /app/.ssh
cp config/ssh/* /app/.ssh/
mkdir /tmp/repos
git clone --bare ssh://github.com/<username>/<repo>.git /tmp/repos/<repo>

但我得到了:

初始化/tmp/repos/assets/ Host密钥验证中的空Git存储库失败。致命:远程终端意外挂起。

公钥已作为部署密钥添加到我要提取的回购文件中,因此我的问题如下:

  • 我是否将私钥安装在正确的目录中?
  • 私钥文件必须有特定的名称吗?
  • 这一做法是否可能/建议?
  • 如果不是的话,最好的选择是什么?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 06:13:52

如果您想在构建期间访问私有存储库,那么这个buildpack是最好的选择:

https://github.com/timshadel/heroku-buildpack-github-netrc

这允许您使用Github访问令牌设置环境变量。在构建过程中,使用访问令牌创建了一个.netrc文件,它将允许您访问该用户的任何存储库。

但是,如果您希望在构建期间访问私有存储库,例如,如果您的web dyno正在执行git操作,那么您可以通过包含访问令牌的方式指定存储库URI:

token@github.com/ABASystems/abas-engineering.git

这两种方法都允许您在不公开密码的情况下访问私有git存储库。

票数 4
EN

Stack Overflow用户

发布于 2017-07-15 14:13:49

可以使用“预编译钩子”将您的部署键放在$HOME/.ssh/id_rsa上,Heroku的buildpack将很高兴地使用它在其编译阶段期间下载您的私有内容。

您需要提交要推送的应用程序上的部署键和ssh configfile,并编写钩子代码将其复制到正确的位置。一个必要的警告是启用未经检查的连接。例如,应用程序的.ssh/config

代码语言:javascript
复制
StrictHostKeyChecking no

一些构建包有一个特殊的“预编译钩子”,它在编译/下载外部包之前运行。不再被记录在Heroku上,但它的存在是一种标准。下面是一些“替代”文档:https://deis.com/docs/workflow/applications/using-buildpacks/#compile-hooks。至少Python和NodeJS构建包以某种方式支持它。

bin/pre_compile上的代码示例,从应用程序的rootdir开始执行:

代码语言:javascript
复制
#!/usr/bin/env bash
set -eo pipefail

# The pre_compile hook is run by heroku-buildpack-python
echo "-----> I'm pre-compile hook"

# Work around Heroku bug whereby pylibmc isn't availbale during
# compile phase. See: https://github.com/heroku/heroku-buildpack-python/issues/57
export MEMCACHE_SERVERS='' MEMCACHIER_SERVERS=''

if [ -f bin/set_ssh_key ]; then
    echo "-----> Running set_ssh_key"
    chmod +x bin/set_ssh_key
    bin/set_ssh_key
fi

echo "-----> Pre-compile done"

对于bin/set_ssh_key来说

代码语言:javascript
复制
#!/usr/bin/env bash
set -eo pipefail

if [ -d "$BUILD_DIR/.ssh" ]; then
    echo "-----> Copying $BUILD_DIR/.ssh over $HOME/.ssh..."

    if [ ! -d "$HOME/.ssh" ]; then
        mkdir $HOME/.ssh
    fi

    cp -rv $BUILD_DIR/.ssh/* $HOME/.ssh/
    echo "       done."
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25961970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档