从变量添加 SSH 密钥

Posted

技术标签:

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

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

【问题讨论】:

密钥最初是如何进入变量的?您可能想跳过该步骤并让ssh-add 直接从原始文件中读取。 在我的特殊情况下,SSH 密钥是一个 GitLab 秘密变量。 【参考方案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 -

以上是关于从变量添加 SSH 密钥的主要内容,如果未能解决你的问题,请参考以下文章

向现有液滴添加新的 ssh 密钥时,DigitalOcean 权限被拒绝(公钥)?

如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]

如何通过环境变量传递 ssh 密钥密码

如何为 Github 帐户和 Bitbucket 公司帐户添加多个 SSH 密钥

将 GitHub ssh 密钥添加到 ec2 实例

Github 添加其他人的 SSH 密钥将授予对所有存储库的访问权限?