【问题标题】:Run ssh-add in gitlab-ci.yml在 gitlab-ci.yml 中运行 ssh-add
【发布时间】:2021-06-25 15:25:07
【问题描述】:

我有一个 Gitlab 管道,我想在其中使用 ssh 创建与服务器的连接:

stages:
  - connect

connect-ssh:
  stage: connect
  script:
    - mkdir ~/.ssh
    - echo -e "$PROD_SSH_KEY" > file_rsa        # SSH PRIVATE KEY
    - echo -e "$PROD_SSH_PASSPHRASE" > passfile # PASSPHRASE
    - chmod 600 file_rsa
    - cat passfile | ssh-add file_rsa           # DOESN'T WORK
    - ssh -i $PROD_USER@$PROD_HOST
    - pwd

$ 猫密码文件 | ssh-add group-5_rsa
无法打开与您的身份验证代理的连接。

我看到的答案很少,但它们不适合 gitlab 工作。 对于这种的情况,我有什么解决办法?

【问题讨论】:

  • 您可能只需要启动您的 ssh-agent,因为它不在您的 gitlab-runner 中运行。在使用 ssh-add 之前尝试执行 eval $(ssh-agent -s)
  • 是的,现在我明白它对我有什么帮助,问题是 ssh-add 没有让我输入密码,但 eval $(ssh-agent -s) 确保它在监听。跨度>

标签: ssh gitlab gitlab-ci


【解决方案1】:

gitlab-org/gitlab-runner issue 2418 中说明了另一种方法

  • 将命令放入脚本中,包括eval $(ssh-agent -s)
  • 采购说脚本

像你一样调用脚本会打开一个子shell。因此,ssh 代理环境在外壳中不可用。
但是,获取脚本会在当前 shell 中执行它。这也意味着您应该小心您在该脚本中所做的事情。您可以覆盖环境变量,退出主shell等。

在您的情况下,只需添加 eval $(ssh-agent -s) 可能就足够了,因为获取脚本与在 .gitlab-ci.yml 本身中逐行运行这些命令相同。

【讨论】:

  • 您好,我不明白为什么添加 eval $(ssh-agent -s) 可能就足够了,它只是在调用 ssh-agent,不是吗?它如何获取密码并在 ssh-add 中输入?看了下gitlab-runner也看不懂,不用passphrase,没用吗?谢谢你的回答
  • @HamzaInce 它确保代理已启动并正在侦听:gitlab.com/gitlab-org/gitlab-runner/-/issues/2418 就是一个很好的例子。
猜你喜欢
  • 2017-02-13
  • 2020-08-21
  • 1970-01-01
  • 2017-04-01
  • 2021-11-13
  • 2013-09-12
  • 2017-07-22
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多