从变量添加 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"
【讨论】:
或者因为它是 bashssh-add - <<<"$SSH_PRIVATE_KEY"
并使用 herestring。
更快吗?为什么<<<
? ssh-add - < "$SSH_PRIVATE_KEY"
呢?
嗯,变量"$SSH_PRIVATE_KEY"
保存了值。您需要将其作为stdin
的输入,用于ssh-add
。作为一个方便的特性,bash 有 heredoc 和 herestring。您可以使用herestring`<<<
使"$SSH_PRIVATE_KEY"
中的变量数据显示为stdin
上的输入,用于ssh-add
和ssh-add - <<<"$SSH_PRIVATE_KEY"
。它更快,因为不会生成额外的 *subshells。您使用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 - > /dev/null
Gitlab documentation
【讨论】:
【参考方案3】:此外,您可以使用:
echo "$SSH_PRIVATE_KEY" | ssh-add -
或ssh-add <(echo "$SSH_PRIVATE_KEY")
【讨论】:
谢谢!这对我有用echo "$SSH_PRIVATE_KEY" | ssh-add -
以上是关于从变量添加 SSH 密钥的主要内容,如果未能解决你的问题,请参考以下文章
向现有液滴添加新的 ssh 密钥时,DigitalOcean 权限被拒绝(公钥)?
如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]