【问题标题】:Add SSH key from variable从变量添加 SSH 密钥
【发布时间】:2018-02-25 10:45:34
【问题描述】:

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

【问题讨论】:

  • 密钥最初是如何进入变量的?您可能想跳过该步骤并让ssh-add 直接从原始文件中读取。
  • 在我的特殊情况下,SSH 密钥是一个 GitLab 秘密变量。

标签: bash ssh ssh-keys


【解决方案1】:
ssh-add - <<< "${SSH_PRIVATE_KEY}"

【讨论】:

  • 或者因为它是 bash ssh-add - &lt;&lt;&lt;"${SSH_PRIVATE_KEY}" 并使用 herestring
  • 更快吗?为什么&lt;&lt;&lt;ssh-add - &lt; "${SSH_PRIVATE_KEY}"呢?
  • 嗯,变量"${SSH_PRIVATE_KEY}" 保存了值。您需要将其作为stdin 的输入,用于ssh-add。作为一个方便的特性,bash 有 heredocherestring。您可以使用herestring`&lt;&lt;&lt; 使"${SSH_PRIVATE_KEY}" 中的变量数据显示为stdin 上的输入,用于ssh-addssh-add - &lt;&lt;&lt;"${SSH_PRIVATE_KEY}"。它更快,因为不会生成额外的 *subshel​​ls。您使用echo key | ssh-add - 生成了 3 个(1-for echo,1-for 管道 | 和 1-for ssh-add)。 (注意:在ssh-add 之后,您可能需要也可能不需要'-',但我怀疑您需要。)
  • @DavidC.Rankin 是的,您需要 '-' 或 ssh-add 将在 $HOME/.ssh 中查找密钥
  • 此解决方案不适用于 Paker 供应商shell 并返回错误:Syntax error: redirection unexpected 这是因为这里的字符串如
【解决方案2】:

如果您使用的是 Gitlab CI/CD,并且想要使用变量作为 SSH 密钥,您可以执行以下操作:

  • 将变量添加到Settings -> CI/CD -> Variables
  • 在您的 .gitlab-ci.yml 文件中使用该变量:

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

Gitlab documentation

【讨论】:

    【解决方案3】:

    此外,您可以使用:
    echo "${SSH_PRIVATE_KEY}" | ssh-add -

    ssh-add &lt;(echo "$SSH_PRIVATE_KEY")

    【讨论】:

    • 谢谢!这对我有用echo "${SSH_PRIVATE_KEY}" | ssh-add -
    猜你喜欢
    • 2018-03-21
    • 2021-02-23
    • 2018-03-15
    • 2017-11-02
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多