【发布时间】:2018-02-25 10:45:34
【问题描述】:
我在 Docker 容器中有一个 bash 脚本,需要通过 ssh 访问远程服务器。我在变量中有 SSH 密钥。如何将其添加到 SSH?
【问题讨论】:
-
密钥最初是如何进入变量的?您可能想跳过该步骤并让
ssh-add直接从原始文件中读取。 -
在我的特殊情况下,SSH 密钥是一个 GitLab 秘密变量。
我在 Docker 容器中有一个 bash 脚本,需要通过 ssh 访问远程服务器。我在变量中有 SSH 密钥。如何将其添加到 SSH?
【问题讨论】:
ssh-add 直接从原始文件中读取。
ssh-add - <<< "${SSH_PRIVATE_KEY}"
【讨论】:
ssh-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 之后,您可能需要也可能不需要'-',但我怀疑您需要。)
shell 并返回错误:Syntax error: redirection unexpected 这是因为这里的字符串如
如果您使用的是 Gitlab CI/CD,并且想要使用变量作为 SSH 密钥,您可以执行以下操作:
Settings -> CI/CD -> Variables
在您的 .gitlab-ci.yml 文件中使用该变量:
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
【讨论】:
此外,您可以使用:
echo "${SSH_PRIVATE_KEY}" | ssh-add -
或ssh-add <(echo "$SSH_PRIVATE_KEY")
【讨论】:
echo "${SSH_PRIVATE_KEY}" | ssh-add -