从变量中添加SSH密钥

26

我有一个位于Docker容器内部的bash脚本,需要通过ssh访问远程服务器。我在变量中有SSH密钥。如何将它添加到SSH中?


1
密钥最初是如何进入变量的?您可能希望跳过此步骤,让ssh-add直接从原始文件中读取。 - chepner
3
在我的情况下,SSH密钥是GitLab的秘密变量。 - user3624760
3个回答

55
ssh-add - <<< "${SSH_PRIVATE_KEY}"

3
或者,既然这是Bash,您可以使用 ssh-add - <<<"${SSH_PRIVATE_KEY}" 并使用herestring - David C. Rankin
1
它更快吗?为什么使用 <<<ssh-add - < "${SSH_PRIVATE_KEY}" 呢? - user3624760
12
变量 ${SSH_PRIVATE_KEY} 保存值。你需要将其作为 ssh-add 命令的标准输入。Bash 提供两种方便的特性 here-documenthere-string。你可以使用 here-string <<<,使 "${SSH_PRIVATE_KEY}" 中的变量数据出现在 ssh-add 命令的标准输入中,命令为 ssh-add - <<<"${SSH_PRIVATE_KEY}"。相比于 echo key | ssh-add - 生成额外的 子 shell 数量更少,因此执行速度更快。(注意:可能需要在 ssh-add 后加上 '-',但我认为你需要这样做)。 - David C. Rankin
2
@DavidC.Rankin 是的,你需要使用'-',否则ssh-add将在$HOME/.ssh中查找密钥。 - Fabien Bouleau
如果您正在尝试在 GitHub Actions 中执行此操作,则需要执行以下命令:eval $(ssh-agent -s) && ssh-add - <<< '${{ secrets.SSH_PRIVATE_KEY }}' - Nato Boram
显示剩余2条评论

23
如果您正在使用Gitlab CI/CD,并且想要使用变量作为SSH密钥,可以按照以下步骤进行操作:
  • 设置 -> CI/CD -> 变量中添加您的变量
  • 在您的.gitlab-ci.yml文件中使用该变量:

    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null

Gitlab文档


6
另外,您可以使用:
echo "${SSH_PRIVATE_KEY}" | ssh-add -
或者
ssh-add <(echo "$SSH_PRIVATE_KEY")

2
谢谢!这对我有用 echo "${SSH_PRIVATE_KEY}" | ssh-add - - Joseph Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接