从谷歌云计算引擎上的启动脚本中提取 git 存储库

问题描述 投票:0回答:2

为了向我的团队展示我正在构建的应用程序的进展情况,我在谷歌云计算引擎上创建了一个小型开发服务器。为了节省成本,该服务器通常会关闭,只有在我们一起工作时才会打开。当服务器未打开时,我正在开发并推送到 git 存储库。当我启动服务器时,应该提取最新的更改,安装节点包并启动节点服务器。为此,我创建了以下启动脚本:

#! /bin/bash
cd /to/my/server/folder
git pull
sudo npm install --no-progress
nohup node src/ &

我已经创建了一个 ssh 密钥,并将其添加为我的 gitlab 帐户中此特定存储库的只读部署密钥。该脚本在服务器上进行了测试并且工作完全正常。现在是有趣的部分。 当脚本作为启动脚本运行时(https://cloud.google.com/compute/docs/startupscript)它不起作用。错误:

permission denied (public key)
fatal: could not read from repo make sure it exists.

我尝试了这些修复: 在 gitlab 上获取权限被拒绝(公钥)。问题是他们一般无法拉取 git 存储库。就我而言,它在命令行中运行良好,在 shell 脚本中运行良好,但在启动脚本中不起作用。

我还尝试了从“可能是这样”到“疯狂猜测”的整个范围内的一大堆其他东西。显然我在这里缺少一些东西。有人可以帮我吗?

node.js ssh gitlab ubuntu-16.04 gcloud
2个回答
1
投票

终于在这里找到答案:https://superuser.com/a/868699/852795。显然,Google 启动脚本中使用的 SSH 密钥出了问题。解决方案是明确告诉 git 使用哪个键。像这样:

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git pull


0
投票

将其留在这里,因为我花了一些时间才弄清楚:

正如OP所述,参考链接确实解决了启动SSH代理的问题,但我的脚本仍然没有找到GIT密钥。这是因为启动脚本以 GCP 上的 root 用户身份运行,因此它会在

/root/.ssh
而不是
~/.ssh/
中查找键。所以我的快速解决方案只是将密钥移至
/root/.ssh/
,现在我的启动脚本可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.